明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 542|回复: 2

[源码] 三维多段线转多段线

[复制链接]
发表于 2024-8-17 13:59:24 | 显示全部楼层 |阅读模式
  1. (defun $3dline->pline$ (3line lst / dxf p pick pl ps vt)
  2.   ;三维多段线转PLINE
  3.   (or 3line
  4.       (and
  5.   (setq pick (vl-catch-all-apply 'entsel (list "请点击三维多段线")))
  6.   (progn (if (vl-catch-all-error-p pick)
  7.      (setq pick nil)
  8.          )
  9.          (setq 3line (car pick))
  10.   )
  11.       )
  12.   )
  13.   (and 3line
  14.        (setq dxf (entget 3line))
  15.        (progn
  16.    (and dxf
  17.         (= "POLYLINE" (cdr (assoc 0 dxf)))
  18.         (= (cdr (assoc 100 (vl-remove (assoc 100 dxf) dxf)))
  19.      "AcDb3dPolyline"
  20.         )        ;三维多段线  
  21.         (progn
  22.     (setq dxf nil)
  23.     (setq ps nil)
  24.     (setq vt (entnext 3line))
  25.     (while (= "VERTEX" (cdr (assoc 0 (entget vt))))
  26.       (setq p (cdr (assoc 10 (entget vt))))
  27.       (setq ps (cons (cons 10 p) ps))
  28.       (setq vt (entnext vt))
  29.     )
  30.     (setq ps (reverse ps))
  31.     (setq dxf (append (list
  32.             (cons 0 "LWPOLYLINE")
  33.             (cons 100 "AcDbEntity")
  34.             (cons 100 "AcDbPolyline")
  35.             (cons 90 (length ps))
  36.           )
  37.           ps
  38.         )
  39.     )
  40.     (setq pl (vl-catch-all-apply 'entmakex (list dxf)))
  41.     (if (vl-catch-all-error-p pl)
  42.       (setq pl nil)
  43.     )
  44.     (if pl
  45.       (progn (redraw) (entdel 3line))
  46.     )
  47.         )
  48.    )
  49.    (if pl()(print "转换多段线失败"))
  50.        )
  51.   )  
  52.   (if pl
  53.     pl
  54.     3line
  55.   )
  56. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-8-17 15:53:18 | 显示全部楼层
大师 威威 多段线一直就是核心
发表于 2024-8-22 09:25:03 | 显示全部楼层
大神厉害,我写了一个把多段线坐标读取到剪切板,但是运行不了,能帮看看吗?

(defun c:pte4 (/ e n i lst)  ;往剪贴板写坐标
  (vl-load-com)
  (setq e (ssget '((0 . "*polyline"))))
   (setq n (sslength e)
        i 0
        lst '()
  )

  (while (< i n) ;while1
    (setq lst (plinexy (setq obj (vlax-ename->vla-object (ssname e i)))))
    (vlax-invoke-method (vlax-get-object "Forms.DataObject") 'SetText "x\ty\t\n")
    (foreach xy lst
      (vlax-invoke-method (vlax-get-object "Forms.DataObject") 'AppendText (rtos (car xy) 2 3))
      (vlax-invoke-method (vlax-get-object "Forms.DataObject") 'AppendText "\t")
      (vlax-invoke-method (vlax-get-object "Forms.DataObject") 'AppendText (rtos (cadr xy) 2 3))
      (vlax-invoke-method (vlax-get-object "Forms.DataObject") 'AppendText "\t\n")
    )
    (setq i (+ 1 i))
  )
  (vlax-invoke-method (vlax-get-object "Forms.DataObject") 'PutInClipboard)
  (princ)
)

(defun plinexy (obj)
  (vlax-for vertex (vla-get-Coordinates obj)
    (list (car vertex) (cadr vertex))
  )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 10:42 , Processed in 0.185140 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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