获取三维Po的UCS坐标
大家好,老师们,我是一个该死的Lisp编程初学者,我需要一种方法来让它适用于三维多段线。
基本上,它应该给我这个多段线上每个点的当前UCS坐标。
问题是,我只是学习如何在2D而不是3D中做这样的事情。。。
谢谢 哦,我忘了我到目前为止的文件了。。。。很抱歉
这只是一个典型的pExport文件
(定义c:pExport()
(setq sset(ssget’(-4)。(0。“LW多段线”)(-4。“或“>”))
(如果sset
(程序
(setq itm 0 num(sslength sset))
(setq fn(getfield“点导出文件”“”“txt”1))
(如果(/=fn nil)
(程序
(setq fh(open fn“w”))
(虽然(
(setq hnd(ssname sset itm))
(setq ent(entget hnd))
(setq obj(cdr(assoc 0 ent)))
(续)
(=obj“点”)
(setq pnt(cdr(assoc 10 ent)))
(setq pnt(trans pnt 0 1))**驾驶室
(princ(strcat(rtos(车载pnt)2“,”
(rtos(cadr pnt)2“
(rtos(caddr pnt)2)fh)
(princ“\n”fh)
)
(=obj“LWPOLYLINE”)
(如果(=(cdr(assoc 38 ent))无)
(setq elv 0.0)
(setq elv(cdr(assoc 38 ent)))
)
(foreach rec ent)
(if(=(car rec)10)
(程序
(setq pnt(cdr rec))
(setq pnt(trans pnt 0 1))**驾驶室
(princ(strcat(rtos(车载pnt)2“,”
(rtos(cadr pnt)2“
(rtos elv 2)fh)
(princ“\n”fh)
)
)
)
)
(无)
)
(setq itm(1+itm))
)
(关闭fh)
)
)
)
)
(普林斯)
)
(princ“\n点导出已加载,键入pExport以运行。”)
(普林斯) 我已经这么做了。问题是我需要当前UCS坐标,无法使用“trans”命令 请阅读代码发布指南,并编辑代码以包含在代码标签中。
Your Code Here=
Your Code Here 考虑以下因素:
(defun c:ptx ( / d f i n s x z )
(if (and (setq s (ssget '((0 . "POINT,LWPOLYLINE"))))
(setq f (getfiled "" "" "txt" 1))
)
(if (setq d (open f "w"))
(progn
(repeat (setq i (sslength s))
(setq x (entget (ssname s (setq i (1- i))))
z (cdr (assoc 038 x))
n (cdr (assoc 210 x))
)
(if (= "POINT" (cdr (assoc 0 x)))
(write-line (pnt2str (trans (cdr (assoc 10 x)) 0 1)) d)
(foreach g x
(if (= 10 (car g))
(write-line (pnt2str (trans (list (cadr g) (caddr g) z) n 1)) d)
)
)
)
)
(close d)
)
(princ "\nUnable to open the file for writing.")
)
)
(princ)
)
(defun pnt2str ( p )
(if (cdr p) (strcat (rtos (car p) 2) "," (pnt2str (cdr p))) (rtos (car p) 2))
)
(princ) 谢谢你的回答,但我觉得我的问题有点理解错误。
我在3Dpolyline上没有实际的点。我需要的是顶点。
很抱歉,我是一名测量工程师,所以一切对我来说都很重要 只是一个顶棚:
LW多段线、点和3DPolyline是非常不同的实体。所以这是一条你正在处理的多段线?
点线3DPOLYLINEs 3DPOLYMESHes都将这些点值存储在3轴WCS坐标中。
-大卫 我正在处理三维多段线。 对于真正的3DPOLYLINE,这可能会起作用:
(defun c:3dp2ucs (/ ss en ed vl vn vd wf)
(and (setq ss (ssget (list (cons 0 "POLYLINE")
(cons -4 "&")
(cons 70 8))))
(= (sslength ss) 1)
(setq en (ssname ss 0)
ed (entget en)
vn (entnext en)
vd (entget vn))
(while (= "VERTEX" (cdr (assoc 0 vd)))
(setq vl (cons (trans (cdr (assoc 10 vd)) 0 1) vl)
vn (entnext vn)
vd (entget vn)))
(setq wf (open "POINT.DAT" "w"))
(foreach v (reverse vl)
(prin1 v wf)
(write-line "" wf))
(close wf))
(prin1))
-大卫
-3DP。图纸 谢谢你的快速回复David,
但我无法在ucs文件中创建和写入它。
现在它变得很可笑,所以我会让我的老板派我去参加一个研讨会。
谢谢大家。
页:
[1]
2