明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5062|回复: 11

请教怎么列出多段线的所有顶点坐标?

[复制链接]
发表于 2011-9-15 00:21:10 | 显示全部楼层 |阅读模式
如题:怎么列出多段线的所有顶点坐标?用ASSOC好像只能列出主实体的10组码?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-12-28 20:24:45 | 显示全部楼层
(setq ptb (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) (entget (car (entsel "\n选取多段线:"))))))
回复 支持 1 反对 0

使用道具 举报

发表于 2011-9-15 08:17:17 | 显示全部楼层
此中有
http://bbs.mjtd.com/thread-10652-1-1.html

老帖中亦有不同写法滴 ....
发表于 2011-9-15 09:56:23 | 显示全部楼层
搜索一下,论坛上很多!
发表于 2011-9-15 16:39:14 | 显示全部楼层
(defun get-pline-point (ent / ptlist ptlist1)

(vl-load-com)
(setq ptlist '() ptlist1 '() n 0)
(setq ptlist (vlax-safearray->list
  (vlax-variant-value
    (vlax-get-property
      (vlax-ename->vla-object ent)
      'Coordinates
      )
    )
  )
       )
  (cond
    (
     (= "LWPOLYLINE" (cdr (assoc 0 (entget ent)
     )
     )
)
    (progn
      (repeat (/ (length ptlist) 2)
(setq ptlist1 (cons (list (nth n ptlist)
      (nth (setq n (1+ n)) ptlist)
      )
       ptlist1)      
       )
(setq n (1+ n))
)
      )
     )
    (
     (= "POLYLINE" (cdr (assoc 0 (entget ent)
         )
         )
     )
    (progn
      (repeat (/ (length ptlist) 3)
(setq ptlist1 (cons (list (nth n ptlist)
      (nth (setq n (1+ n)) ptlist)
      (nth (setq n (1+ n)) ptlist)
      )
       ptlist1)
       )
(setq n (1+ n))
)
      )
     )
    )
(princ (reverse ptlist1))
(princ)
)

;;;结束,需先判断图元是否为"LWPOLYLINE,POLYLINE"


在知道图元名的时候直接用(get-pline-point ent),返回如表((x1 y1 [z1])(x2 y2 [z2])(x3 y3 [z3])...)。
发表于 2011-9-15 16:51:18 | 显示全部楼层
如果只是lwpolyline
(setq ent1  (entget (car (entsel))))
(mapcar '(lambda(X)
(if (= 10 (car x))(setq ptlist1 (cons (cdr x) ptlist1)))
)
ent1
)
(princ (reverse ptlist1))
(princ)
发表于 2011-9-15 20:59:15 | 显示全部楼层
CAD的 list命令不就可以列表出来嘛
发表于 2013-12-28 19:17:14 | 显示全部楼层
本帖最后由 林霄云 于 2013-12-31 15:56 编辑
  1. (defun get_pline_vertex()
  2. (setq ent1  (entget (car (entsel))));用于测试。可以作为参数传递对象。
  3. (setq ptlist1 nil);设初始值。
  4.   
  5. (mapcar '(lambda(X)
  6. (if (= 10 (car x))

  7.   (setq ptlist1 (cons (cdr x) ptlist1)))
  8.   
  9. );lambda
  10. ent1
  11. );mapcar
  12. (princ (reverse ptlist1))
  13. (princ)
  14.   );defun
另附cons和append耗时区别:http://bbs.mjtd.com/forum.php?mo ... 870&fromuid=7303580

发表于 2015-3-12 13:00:46 | 显示全部楼层
yshf 发表于 2013-12-28 20:24
(setq ptb (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) (entget (car (entsel "\n选取多段线: ...

很实用很实用很实用很实用很实用
发表于 2016-1-1 20:50:51 | 显示全部楼层
yshf 发表于 2013-12-28 20:24
(setq ptb (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) (entget (car (entsel "\n选取多段线: ...

很简洁
(defun c:tt ()
(setq ptb (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) (entget (car (entsel "\n选取多段线:"))))))
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-24 08:49 , Processed in 0.167291 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表