【多段线坐标问题】
本人初涉LSP,时间紧任务重,各位老师们请抬手相助,感谢不尽。我想求多段线的三维坐标X,Y,Z并输出到TXT中。能不能大神们给个完整的程序,包括CAD启动指令,全选所有多段线。一定要有Z坐标哦,我找的好多资料都输出不了Z坐标!
下面是我找到的2个资料,第一个不会写下去,第二个只能输出X,Y坐标,没有Z坐标。
---------------------------------------------------------------------
,;;46.2 [功能] pline,lwpline点坐标表By 无痕;;示例(vxs (car (entsel))),返回三维点坐标
(defun vxs (e / i v lst)
(setq i -1)
(while
(setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
(setq lst (cons v lst))
)
(reverse lst)
)
------------------------------------------------------------------------
(defun c:tqzb (/)
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (setq wjm (getfiled "请指定要保存的坐标文件" "e:\\" "txt" 1))
(if (setq ssa (ssget '((0 . "LWPOLYLINE"))))
(progn
(setq fff (open wjm "w")
n (sslength ssa)
i 0
no0
)
(repeat n
(setq dxf (entget (ssname ssa i))
i (1+ i)
ptb (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10)) dxf))
ptb (mapcar '(lambda(x)(trans x 0 1)) ptb)
)
(foreach pt ptb
(setq no (1+ no))
(write-line
(strcat ;(itoa no) ","
(rtos (carpt) 2 2) ","
(rtos (cadr pt) 2 2) ","
)
fff
)
)
)
(close fff)
(princ (strcat "\n坐标已存入\"" wjm "\"中"))
)
)
)
(setvar "cmdecho" cm)
(princ)
)
自己顶一个,,,大大们帮改下第二个程序就行。。。真的急死人了。。。 本帖最后由 kwok 于 2014-5-6 19:50 编辑
看看这个是不是,输出xyz坐标到文本.
CAD启动指令: tqzb;;46.2 [功能] pline,lwpline点坐标表By 无痕;;示例(vxs (car (entsel))),返回三维点坐标
(defun vxs (e / i v lst)
(setq i -1)
(while
(setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
(setq lst (cons v lst))
)
(reverse lst)
)
---------------------------------------------------------
;;;;;;;;;三维顶点输出到文本
(defun c:tqzb (/ cm ss en ii ptb no )
(vl-load-com)
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq wjm (getfiled "请指定要保存的坐标文件" "e:\\" "txt" 1))
(setq fff (open wjm "w"))
(setq ss (ssget '((0 . "lwPOLYLINE"))))
(setq ii 0
no0
)
(repeat (sslength ss)
(setq en (ssname ss ii)
ii(1+ ii)
ptb (vxs en))
(foreach pt ptb
(setq no (1+ no))
(write-line
(strcat (itoa no) ": "
(rtos (carpt) 2 2) ", "
(rtos (cadr pt) 2 2) ", "
(rtos (caddr pt) 2 2) ", "
)
fff
)
)
)
(close fff)
(princ (strcat "\n坐标已存入\"" wjm "\"中"))
(setvar "cmdecho" cm)
(princ)
) kwok 发表于 2014-5-6 15:15 static/image/common/back.gif
看看这个是不是,只加了可以输入xyz.
CAD启动指令: tqzb
不行啊大大,是只加了第24行caddr pt 吗,我试过了,输出的都是0。。。是多段线的Z坐标输不出来的原因吗??? 楼上输出的是数学坐标,如需输出地理坐标,需将 (rtos (carpt) 2 2) ","与 (rtos (cadr pt) 2 2) ","位置互换。另外,最好在程序前面加上一句:(setvar"dimzin"0);;保留小数位数时如果位数不足可以补零,不然,小数为0时显示不出来。
轻多段线(LWPolyline)是平面线形,是无z坐标的,z坐标是多段线所在平面的z坐标,用组码38表示,对于多段线平面和世界坐标平面不平行的情况,还要考虑拉伸方向(210组码)的影响,即实际坐标是通过10、38、210组码计算出来的,不是简单的c...r。
3D多段线(Polyline)具有z坐标,但每个顶点是通过实体跟随来反映的,要用函数entnext来查找。 ll_j 发表于 2014-5-6 16:09 static/image/common/back.gif
轻多段线(LWPolyline)是平面线形,是无z坐标的,z坐标是多段线所在平面的z坐标,用组码38表示,对于多段线 ...
顿悟!怪不得Z坐标总是0.大大能不能简单的举个例子?让我能修改一下用到程序里 ll_j 发表于 2014-5-6 16:09 static/image/common/back.gif
轻多段线(LWPolyline)是平面线形,是无z坐标的,z坐标是多段线所在平面的z坐标,用组码38表示,对于多段线 ...
我求的是CAD中等高线的坐标值,我想了下,确实是全都是轻多段线,因为等高线平面都是和世界坐标平行的。那我只要求出标高就行了。大大你刚才说组码38,这个38怎么提取? 玉麒麟卢比奥 发表于 2014-5-6 16:21 static/image/common/back.gif
我求的是CAD中等高线的坐标值,我想了下,确实是全都是轻多段线,因为等高线平面都是和世界坐标平行的。那 ...
(cdr (assoc 38 (entget (car (entsel))))) ll_j 发表于 2014-5-6 16:47 static/image/common/back.gif
(cdr (assoc 38 (entget (car (entsel)))))
谢谢!我刚试了半天,不知道应该把这句话加在循环的哪一行。。。大大能不能帮到底,今天晚上交接,实在没时间细学了
页:
[1]
2