312735894 发表于 2014-1-24 16:45:11

二维多段线没有顶点表,怎么提取顶点坐标呢?(注意:不是多段线)还请各位大大解答!

如图:


二维多段线没有顶点表,不知道怎么在不转换成多段线的前提下直接提取坐标,要是转换成多段线,有批量的方法么?
请各位大大解答,谢谢!

evayleung 发表于 2018-7-3 20:17:55

学习一下。。我一般都是把二维多段线转为多段线再编辑的。

edata 发表于 2014-1-24 18:32:01

;;返回多段线顶点表
;;From mjtd.com
;;支持2D/3D多段线
;;modfiy by edata
(defun vertexs (ename / plist pp n)
(cond
    ((and ename(= (cdr(assoc 0 (entget ename))) "POLYLINE"))
    (progn
(setq obj (vlax-ename->vla-object ename))
(setq plist (vlax-safearray->list
(vlax-variant-value
    (vla-get-coordinates obj))))
(setq n 0)
(repeat (/ (length plist) 3)
    (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)(nth (1+ (1+ n)) plist)))))
    (setq n (+ n 3))
)
pp
))
   ((and ename(= (cdr(assoc 0 (entget ename))) "LWPOLYLINE"))
    (progn
(setq obj (vlax-ename->vla-object ename))
(setq plist (vlax-safearray->list
(vlax-variant-value
    (vla-get-coordinates obj))))
(setq n 0)
(repeat (/ (length plist) 2)
    (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
    (setq n (+ n 2))
)
pp
))
    )
)

312735894 发表于 2014-1-24 18:43:19

edata 发表于 2014-1-24 18:32 static/image/common/back.gif


哇,又是你啊,大大
thank you
VLAX函数看不懂,不知道哪里有VLAX函数的帮助,lisp的帮助里面没有VLAX的帮助

edata 发表于 2014-1-24 18:49:28

312735894 发表于 2014-1-24 18:43 static/image/common/back.gif
哇,又是你啊,大大
thank you
VLAX函数看不懂,不知道哪里有VLAX函数的帮助,lisp的帮助里面没有VLAX的 ...

来个修改后的。。
;返回多段线顶点表2
;;From mjtd.com
;;支持2D/3D多段线
;;modfiy by edata
(defun vertexs2 (ename / plist pp n enty obj pt_n)
(if(and ename(= (type ename) 'ENAME))
    (progn
      (setq enty(cdr(assoc 0 (entget ename))))
      (if (= enty "LWPOLYLINE")
        (setq pt_n 2)
        (setq pt_n 3)
        )
      (if pt_n
        (progn
          (setq obj (vlax-ename->vla-object ename))
          (setq plist (vlax-safearray->list
                        (vlax-variant-value
                          (vla-get-coordinates obj))))
          (setq n 0)
          (repeat (/ (length plist) pt_n)
          (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)(if(= pt_n 3) (nth (1+ (1+ n)) plist) 0.0)))))
          (setq n (+ n pt_n))
          )
          pp
          )
        )
      )
    )
)

edata 发表于 2014-1-24 18:51:00

AutoCAD LISP_VLISP函数库查询辞典(带书签)_应要求附图
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=89643&fromuid=338795

312735894 发表于 2014-1-24 19:42:56

edata 发表于 2014-1-24 18:49 static/image/common/back.gif
来个修改后的。。

谢谢大大,这回稍微明白点了,我再研究下!谢谢!

edata 发表于 2014-1-24 20:41:07

原来论坛还有更简洁的。。
http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=100137&pid=571715&fromuid=338795

重慶崽兒 发表于 2014-1-24 22:11:13

edata 发表于 2014-1-24 20:41 static/image/common/back.gif
原来论坛还有更简洁的。。
http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=100137&pid=5 ...

太谢谢大大您了,不知道您平时是通过什么学习lisp的
感觉没人讲太难了。。。。
呵呵,这个是我的新号,以后就用这个了!

ckss 发表于 2014-1-24 23:53:39


回复用以学习

USER2128 发表于 2014-1-25 08:38:40

;;;来一个固版主的:
(setq ent (car(entsel "\n选取多段线: ")))
(mapcar 'cdr (vl-remove-if-not '(lambda(x)(= 10 (car x)))(entget ent)))
页: [1] 2
查看完整版本: 二维多段线没有顶点表,怎么提取顶点坐标呢?(注意:不是多段线)还请各位大大解答!