在autocad中,如何获取三维多段线上的顶点坐标,有没有lisp可以参考啊?
我的意思是可以选择多条三维多段线,然后将所有多段线的顶点三维坐标全部显示出来最好是直接保存成文件,因为三维多段线比较多,直接显示不太方便...
我的意思是可以选择多条三维多段线,然后将所有多段线的顶点三维坐标全部显示出来
最好是直接保存成文件,因为三维多段线比较多,直接显示不太方便 展开
最好是直接保存成文件,因为三维多段线比较多,直接显示不太方便 展开
2个回答
展开全部
;你说的三维多义线是指"POLYLINE"实体吧,3p命令绘制的线
(defun c:test ( / a aa bb cc e eg en et n p p0 ps s x y z)
(setq a (ssget '((0 . "polyline"))))
(setq aa (dxfcod -1 a))
(foreach p aa
(setq e (cdr p))
(setq en (entnext e))
(setq eg (entget en))
(setq p (cdr (assoc 10 eg))
p0 p
)
(setq x (car p))
(setq y (cadr p))
(setq z (caddr p))
(setq p (list x y z))
(setq ps p)
(setq bb '(nil))
(setq bb (cons p bb))
(setq cc nil)
(setq cc (cons p cc))
(setq n 1)
(setq et "VERTEX")
(while (= et "VERTEX")
(setq e en)
(setq en (entnext e))
(setq eg (entget en))
(setq et (cdr (assoc 0 eg)))
(if (= et "VERTEX")
(progn
(setq p (cdr (assoc 10 eg)))
(setq n (+ n 1))
(setq x (car p))
(setq y (cadr p))
(setq z (caddr p))
(setq p (list x y z))
(setq s (distance ps p))
(if (> s 0)
(progn
(setq bb (cons p bb))
(setq ps p)
)
)
)
)
)
(print bb)
)
)
(defun dxfcod (numbe ssent / vl len k ai g dxfvl) ; 参数1:dxf组码 参数2:选择集。返回对应选择集的dxf组码表
(setq vl '())
(if ssent
(progn
(setq len (sslength ssent)
k 0
)
(repeat len
(setq ai (ssname ssent k)
k (1+ k)
)
(setq g (entget ai))
(setq dxfvl (assoc numbe g))
(setq vl (append
vl
(list dxfvl)
)
)
)
)
(setq vl nil)
)
(setq vl vl)
)
(defun c:test ( / a aa bb cc e eg en et n p p0 ps s x y z)
(setq a (ssget '((0 . "polyline"))))
(setq aa (dxfcod -1 a))
(foreach p aa
(setq e (cdr p))
(setq en (entnext e))
(setq eg (entget en))
(setq p (cdr (assoc 10 eg))
p0 p
)
(setq x (car p))
(setq y (cadr p))
(setq z (caddr p))
(setq p (list x y z))
(setq ps p)
(setq bb '(nil))
(setq bb (cons p bb))
(setq cc nil)
(setq cc (cons p cc))
(setq n 1)
(setq et "VERTEX")
(while (= et "VERTEX")
(setq e en)
(setq en (entnext e))
(setq eg (entget en))
(setq et (cdr (assoc 0 eg)))
(if (= et "VERTEX")
(progn
(setq p (cdr (assoc 10 eg)))
(setq n (+ n 1))
(setq x (car p))
(setq y (cadr p))
(setq z (caddr p))
(setq p (list x y z))
(setq s (distance ps p))
(if (> s 0)
(progn
(setq bb (cons p bb))
(setq ps p)
)
)
)
)
)
(print bb)
)
)
(defun dxfcod (numbe ssent / vl len k ai g dxfvl) ; 参数1:dxf组码 参数2:选择集。返回对应选择集的dxf组码表
(setq vl '())
(if ssent
(progn
(setq len (sslength ssent)
k 0
)
(repeat len
(setq ai (ssname ssent k)
k (1+ k)
)
(setq g (entget ai))
(setq dxfvl (assoc numbe g))
(setq vl (append
vl
(list dxfvl)
)
)
)
)
(setq vl nil)
)
(setq vl vl)
)
更多追问追答
追问
我指的三维多义指包含“LWPOLYLINE”和“POLYLINE”两种类型的
追答
(defun line_xy (elist / xyzlis) ; 参数实体名,返回实体dxf组码10表
(setq xyzlis '())
(foreach ee (entget elist)
(if (= (car ee) 10)
(progn
(setq y (cadr ee)
x (caddr ee)
)
(setq xyzlis (append
xyzlis
(list (list y x))
)
)
)
)
)
(setq xyzlis xyzlis)
)
VSH艾羽
2024-10-27 广告
2024-10-27 广告
CAD(计算机辅助设计)技术在上海艾羽信息科技有限公司的应用极为广泛。我们利用先进的CAD软件工具,精确高效地绘制产品设计图纸,从二维草图到三维建模,无所不能。这一技术不仅优化了设计流程,缩短了产品从概念到实物的周期,还通过精准的数据分析提...
点击进入详情页
本回答由VSH艾羽提供
展开全部
;用以下程序试一试
(defun c:3wzb()
(vl-load-com)
(if (setq ssa (ssget '((0 . "POLYLINE"))))
(progn
(setq i 0 n (sslength ssa) ptb nil no 0)
(repeat n
(setq obj (vlax-ename->vla-object (ssname ssa i))
pts (vlax-get-property obj "Coordinates")
pts (vlax-safearray->list (vlax-variant-value pts))
i (1+ i)
m (/ (length pts) 3)
)
(repeat m
(setq x (car pts) pts (cdr pts)
y (car pts) pts (cdr pts)
z (car pts) pts (cdr pts)
pt (list x y z)
ptb (cons pt ptb)
no (1+ no)
)
(princ (strcat "\nNo" (itoa no)
" x=" (rtos x 2 3)
" y=" (rtos y 2 3)
" z=" (rtos z 2 3)
)
)
)
)
(setq ptb (reverse ptb))
)
)
(princ)
)
(defun c:3wzb()
(vl-load-com)
(if (setq ssa (ssget '((0 . "POLYLINE"))))
(progn
(setq i 0 n (sslength ssa) ptb nil no 0)
(repeat n
(setq obj (vlax-ename->vla-object (ssname ssa i))
pts (vlax-get-property obj "Coordinates")
pts (vlax-safearray->list (vlax-variant-value pts))
i (1+ i)
m (/ (length pts) 3)
)
(repeat m
(setq x (car pts) pts (cdr pts)
y (car pts) pts (cdr pts)
z (car pts) pts (cdr pts)
pt (list x y z)
ptb (cons pt ptb)
no (1+ no)
)
(princ (strcat "\nNo" (itoa no)
" x=" (rtos x 2 3)
" y=" (rtos y 2 3)
" z=" (rtos z 2 3)
)
)
)
)
(setq ptb (reverse ptb))
)
)
(princ)
)
追问
我运行了一下,不能用啊
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询