多段线循环提取顶点的问题,请大神进来给看看,谢谢!
(defun c:tt()(setq ent (entget (car (entsel))))
(setq i 0)
(repeat (length ent)
(setq lst (nth i ent))
(if (= 10 (car lst))
(progn
(setq x (cadr lst))
(setq y (caddr lst))
)
)
(print (strcat "顶点坐标为:" (rtos x) (rtos y)))
(setq i (1+ i))
)
)代码如上,ent为多段线的组码表,然后进行循环提取坐标,现在有个问题就是:如果循环完成后,我还想要在最后面输出第一次循环得到的X,Y坐标,不知道怎么做,用assoc不行,坐标和第一次提取的对不上!
把所有的坐标都做成一个表吧,循环一次打印一次意义不大啊 而且代码貌似完全不对…… (defun c:tt()
(if (and (setq s1 (entsel "\n选择复线: "))
(setq ent (entget(car s1)))
(= (cdr(assoc 0 ent)) "LWPOLYLINE")) (progn
(setq i 0 plst (list))
(foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))
(setq plst (reverse plst))
(print (strcat "顶点坐标为:" (rtos (caar plst)) (rtos (cadar plst))))
))
(princ)
)
使用vl-remove-if-not函数从实体表中提取出点表,然后再进行其它操作。 ZZXXQQ 发表于 2013-12-30 08:17 static/image/common/back.gif
哦哦 ,我明白了,原来就是将所有的顶点做成一个表,单独来提取,谢谢Z版!!! ll_j 发表于 2013-12-30 09:18 static/image/common/back.gif
使用vl-remove-if-not函数从实体表中提取出点表,然后再进行其它操作。
谢谢老大给的思路,前段时间刚看了您发的帖子,函数赋值与定义,对我帮助太大了,谢谢! 前面给弄错了,其实用assoc也是可以的,可以提取到第一次的坐标的,不过Z版的更好,想提取哪个就提取哪个!
页:
[1]