取二维多段线或三维多段线的所有节点

;取得3dpolyline的所有节点,因3dpolyline节点信息不信在子图元中,而entget函数只能获取POLYLINE主图元数据
;因此要使用entnext函数依次获取所有VERTEX图元的数据,直到遇到SEQEND图元为止
(defun c:g-polyline-vertex ()
  (setq entname (car (entsel "\n请选取二维多段线或三维多段线:")))
  (setq ent_id (cdr (assoc 0 (entget entname))))
  ;判断第一个图元是不是二维多段线或三维多段线
  (if (= ent_id "POLYLINE")
    (progn
      (princ (GetPolylineVertex entname))
    )
    (print "不是二维多段线或三维多段线!")
  )
  (princ)  
)

(defun GetPolylineVertex (entname / entname1 ent_id vertex all_vertex)
  (setq all_vertex ())
  (setq entname1 (entnext entname))
  (setq ent_id (cdr (assoc 0 (entget entname1))))
  (while (/= ent_id "SEQEND")
    ;遍历所有VERTEX图元,取得所有节点
    (setq vertex (cdr (assoc 10 (entget entname1))))
    (setq all_vertex (append all_vertex (list vertex)))
    (if (setq entname1 (entnext entname1))
      (setq ent_id (cdr (assoc 0 (entget entname1))))
    )
  )
  (setq all_vertex all_vertex)  
)
posted @ 2024-03-30 22:59  遇事修性遇人修心  阅读(10)  评论(0编辑  收藏  举报