GerIng 发表于 2022-7-5 16:33:36

获取三维Po的UCS坐标

大家好,老师们,
 
 
我是一个该死的Lisp编程初学者,我需要一种方法来让它适用于三维多段线。
 
 
基本上,它应该给我这个多段线上每个点的当前UCS坐标。
 
 
问题是,我只是学习如何在2D而不是3D中做这样的事情。。。
 
 
 
 
谢谢

GerIng 发表于 2022-7-5 16:39:18

哦,我忘了我到目前为止的文件了。。。。很抱歉
这只是一个典型的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以运行。”)
(普林斯)

GerIng 发表于 2022-7-5 16:46:37

我已经这么做了。问题是我需要当前UCS坐标,无法使用“trans”命令

SLW210 发表于 2022-7-5 16:48:13

请阅读代码发布指南,并编辑代码以包含在代码标签中。
Your Code Here=
Your Code Here

Lee Mac 发表于 2022-7-5 16:54:29

考虑以下因素:
(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)

GerIng 发表于 2022-7-5 16:57:40

谢谢你的回答,但我觉得我的问题有点理解错误。
 
 
我在3Dpolyline上没有实际的点。我需要的是顶点。
 
 
很抱歉,我是一名测量工程师,所以一切对我来说都很重要

David Bethel 发表于 2022-7-5 17:01:51

只是一个顶棚:
 
LW多段线、点和3DPolyline是非常不同的实体。所以这是一条你正在处理的多段线?
 
点线3DPOLYLINEs 3DPOLYMESHes都将这些点值存储在3轴WCS坐标中。
 
-大卫

GerIng 发表于 2022-7-5 17:07:36

我正在处理三维多段线。

David Bethel 发表于 2022-7-5 17:13:02

对于真正的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。图纸

GerIng 发表于 2022-7-5 17:15:30

谢谢你的快速回复David,
 
 
但我无法在ucs文件中创建和写入它。
 
 
现在它变得很可笑,所以我会让我的老板派我去参加一个研讨会。
 
 
谢谢大家。
页: [1] 2
查看完整版本: 获取三维Po的UCS坐标