a4587332 发表于 2014-9-17 19:04:24

相同群码值怎么获得元素

本帖最后由 a4587332 于 2014-9-17 19:40 编辑

这个是 leader (引线标注)
使用assoc函数 只能 获得第 一个 关于10的群码的元素~

请问 怎么样 获得其他的元素~


http://bbs.mjtd.com/data/attachment/album/201409/17/190105c4nix2u448fx4ate.jpg

a4587332 发表于 2014-9-17 19:34:19

自己顶一下~~~~

vlisp2012 发表于 2014-9-17 19:58:52

忘记是哪位大侠的源码了?
(defun get-pl-ptlst (plent / ptlst);;;取得多段线顶点的最短代码
   (vl-load-com)
   (setq      ptlst (vl-remove-if
                '(lambda (x)
                   (/= 10 (car x))
               )
                (entget plent)
            )
   )
   (mapcar 'cdr ptlst)
)

a4587332 发表于 2014-9-17 21:16:44

vlisp2012 发表于 2014-9-17 19:58 static/image/common/back.gif
忘记是哪位大侠的源码了?
(defun get-pl-ptlst (plent / ptlst);;;取得多段线顶点的最短代码
   (vl-loa ...

这个好晦涩难懂阿

Gu_xl 发表于 2014-9-17 21:27:12

a4587332 发表于 2014-9-17 21:16 static/image/common/back.gif
这个好晦涩难懂阿

先练基本功,打好基础!

a4587332 发表于 2014-9-17 21:39:39

Gu_xl 发表于 2014-9-17 21:27 static/image/common/back.gif
先练基本功,打好基础!

哈哈~~ 目前还在lisp 没接触vlisp的层面
谢谢
但是一定会看懂它的

llsheng_73 发表于 2014-9-17 22:25:39

本帖最后由 llsheng_73 于 2014-9-17 23:04 编辑

(defun lwplxy(e)(vl-remove'nil(mapcar'(lambda(x)(if(=(car x)10)(cdr x)))(entget e))))
(defun lwplxy(e)(mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))(entget e))))
两个办法没本质区别,也没测试过哪一种会更快或者没多大出入

((defun Plinexy(e / p a b n ob q et d d1 en et) ;;多线段节点坐标(滤掉了多余点,未处理假闭合)
   (setq a(entget e)ob(vlax-ename->vla-object e)et(cdr(assoc 0 a))n 0 p nil d nil)
   (cond((="LWPOLYLINE"et)
         (repeat(length a)(setq b (nth n a) n (+ n 1))
         (if (= 10 (car b))(progn
                               (setq q(list (cadr b) (caddr b))d1(vlax-curve-getDistAtPoint ob q))
                               (if p (if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
                                 (setq p (list q))))
             )))
      ((="POLYLINE"et)
         (SETQ EN (ENTGET (SETQ E (ENTNEXT E))))
         (WHILE (/= (CDR (ASSOC 0 EN)) "SEQEND")
         (SETQ q (CDR (ASSOC 10 EN))d1(vlax-curve-getDistAtPoint ob q)q(reverse(cdr(reverse q))))
         (if p(if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
             (setq p (list q)))
         (SETQ EN (ENTGET (SETQ E (ENTNEXT E)))))
         (setq p(reverse p))))
   P)
如果不考虑去除相邻点完全重合的话简单很多
(defun Plinexy(e / p a ltype )
   (setq a(entget e)ltype(cdr(assoc 0 a)))
(if(assoc 90 a)(vl-remove'nil(mapcar'(lambda(x)(if(=(car x)10)(cdr x)))(entget e)))
    (progn(while(/=(cdr(assoc 0(setq p(cons(cdr(assoc 10 a))p)e(entnext e)a(entget e))))"SEQEND"))
      (cdr(reverse p)))))

a4587332 发表于 2014-9-17 22:42:18

llsheng_73 发表于 2014-9-17 22:25 static/image/common/back.gif
两个办法没本质区别,也没测试过哪一种会更快或者没多大出入

努力查书在~估计看懂还需要点时间
不过谢谢热心解答

a4587332 发表于 2014-9-17 23:35:19

a4587332 发表于 2014-9-17 22:42 static/image/common/back.gif
努力查书在~估计看懂还需要点时间
不过谢谢热心解答

谢谢你的学习方法~~~

ZZXXQQ 发表于 2014-9-18 07:50:51

另一种方式:
;...
(setq ent (entget e))
(setq plst (list))
(foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))
(setq plst (reverse plst))
;...
页: [1] 2
查看完整版本: 相同群码值怎么获得元素