312735894 发表于 2013-12-29 22:50:07

多段线循环提取顶点的问题,请大神进来给看看,谢谢!

(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不行,坐标和第一次提取的对不上!

陨落 发表于 2013-12-29 23:02:56

把所有的坐标都做成一个表吧,循环一次打印一次意义不大啊

陨落 发表于 2013-12-29 23:33:05

而且代码貌似完全不对……

ZZXXQQ 发表于 2013-12-30 08:17:44

(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)
)

ll_j 发表于 2013-12-30 09:18:55

使用vl-remove-if-not函数从实体表中提取出点表,然后再进行其它操作。

312735894 发表于 2013-12-30 20:08:46

ZZXXQQ 发表于 2013-12-30 08:17 static/image/common/back.gif


哦哦 ,我明白了,原来就是将所有的顶点做成一个表,单独来提取,谢谢Z版!!!

312735894 发表于 2013-12-30 20:09:58

ll_j 发表于 2013-12-30 09:18 static/image/common/back.gif
使用vl-remove-if-not函数从实体表中提取出点表,然后再进行其它操作。

谢谢老大给的思路,前段时间刚看了您发的帖子,函数赋值与定义,对我帮助太大了,谢谢!

312735894 发表于 2013-12-30 20:25:57

前面给弄错了,其实用assoc也是可以的,可以提取到第一次的坐标的,不过Z版的更好,想提取哪个就提取哪个!
页: [1]
查看完整版本: 多段线循环提取顶点的问题,请大神进来给看看,谢谢!