在autocad中,如何获取三维多段线上的顶点坐标,有没有lisp可以参考啊?

我的意思是可以选择多条三维多段线,然后将所有多段线的顶点三维坐标全部显示出来最好是直接保存成文件,因为三维多段线比较多,直接显示不太方便... 我的意思是可以选择多条三维多段线,然后将所有多段线的顶点三维坐标全部显示出来
最好是直接保存成文件,因为三维多段线比较多,直接显示不太方便
展开
 我来答
捭阖one
2014-09-26 · TA获得超过100个赞
知道答主
回答量:81
采纳率:0%
帮助的人:49.3万
展开全部
;你说的三维多义线是指"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)
)
更多追问追答
追问
我指的三维多义指包含“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)
)
dnbc1
2014-09-26 · TA获得超过977个赞
知道小有建树答主
回答量:1235
采纳率:92%
帮助的人:404万
展开全部
;用以下程序试一试
(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)
)
追问
我运行了一下,不能用啊
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式