明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2836|回复: 9

[求助]为何图元数据中的坐标精度不够?怎样提取高精度坐标?

[复制链接]
发表于 2009-8-16 12:58:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-8-16 17:30:57 编辑

我是菜鸟,请教各位高手:
1。在autucad2004中,我要从一条多义线中提取顶点的坐标,多义线由用户选择,结果输出一个包含顶点坐标的表,但运行结果发现坐标值只有小数点后3位,达不到我的要求,我要求达到AutoCAD允许的最大精度。

2。我尝试了如下解决办法均没用:设置系统变量LUNITS=2(十进制数)、LUPREC=8(小数点后位数),但均未能改变图元数据中坐标的精度。

3。我用内部命令'_id查询多义线顶点的实际坐标是小数点后8位数的。

4。请问我如何令图元数据达到我要求的精度,例如小数点后8位。(最高是多少位?)

代码如下:

------------------------------------------------------------------------------------

(defun c:PRINTDXF(/ i ent entdata )   ;遍历图元名及图元数据
  (setq ent (entnext))
  (textpage)
  (while ent
    (setq entdata (entget ent))
    (setq i 0)
    (repeat (length entdata)
      (princ "\n")
      (princ (nth i entdata))
      (setq i (1+ i))
    )
    (setq ent (entnext ent))
  )
  (princ)
)


(defun getvertex( / plname pldata i e vt return)
  ;返回多义线的顶点坐标表,缺陷:点的坐标只有小数点后三位,精度不够。
  (setq plname (car (entsel)))
  (setq plData (entget plname))
  (if (= (cdr (assoc 0 pldata)) "LWPOLYLINE")
    (progn
      (setq i 0)
      (repeat (length pldata)
        (setq e (nth i pldata))
        (if (= (car e) 10) (setq vt (append vt (list (cdr e)))))
        (setq i (1+ i))
      )
    )
  )
  (setq return vt)
)

发表于 2009-8-16 14:14:00 | 显示全部楼层

实数怎么会存在精度的问题,是你的眼睛欺骗了你

发表于 2009-8-16 14:45:00 | 显示全部楼层
DXF的确存在此问题,精度可以再“工具”里设置,不过保存为二进制就没有精度的问题了。
 楼主| 发表于 2009-8-16 17:25:00 | 显示全部楼层
试过上述方法,似乎不起作用,我定义的函数(getvertex)的返回坐标仍然是小数点后3位,而且我的函数并不涉及图形文件保存问题,我新打开一个空白图,在上面画一条多义线,然后调用(getvertex),其返回坐标仍然只有小数点后3位。
发表于 2009-8-16 21:49:00 | 显示全部楼层
一般要用rtos转换才能多显示小数点后的位数。
另外,变量LUPREC可以控制显示的小数位数。
发表于 2013-6-18 17:33:50 | 显示全部楼层
(defun c:tq(/ en enl pts)
  (setq en (car (entsel "选择3dpolyline")))
  (while (= (cdr (assoc 0 (setq enl (entget (setq en (entnext en)))))) "VERTEX")
    (setq pts (cons (cdr (assoc 10 enl)) pts))
    )
  (reverse pts)
  )

我用这个代码提取三维多段线的顶点坐标,生成的精度就是小数点前6位,是小数点前。新手,请指教

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-6-18 18:33:58 | 显示全部楼层
那是的luprec系统变量设置为0
命令: luprec
输入 LUPREC 的新值 <4>: 0

命令: id 指定点:  X = 499934     Y = 3255178     Z = 124

命令: luprec

输入 LUPREC 的新值 <0>: 4

命令: id 指定点:  X = 499934.4194     Y = 3255177.6618     Z = 124.1032
发表于 2013-6-18 18:41:23 | 显示全部楼层
程序改如下,看看显示结果是什么样:
  1. (defun c:tq(/ en enl pts)
  2.      (setq en (car (entsel "选择3dpolyline")))
  3.      (while (= (cdr (assoc 0 (setq enl (entget (setq en (entnext en)))))) "VERTEX")
  4.           (setq pts (cons (cdr (assoc 10 enl)) pts))
  5.      )
  6.      (mapcar '(lambda(pt)(princ (strcat "\nx=" (rtos (car  pt) 2 6)
  7.                                         "  y=" (rtos (cadr pt) 2 6)
  8.                                         "  z=" (rtos (last pt) 2 6)
  9.                                 )
  10.                          )
  11.               )
  12.               (setq pts (reverse pts))
  13.      )
  14.      (princ)
  15.   )
发表于 2013-6-18 21:42:08 | 显示全部楼层
受教了,还是得努力学习,请推荐些好的读物教材学习下。很多命令参数总是不得甚解。
发表于 2015-10-24 16:21:41 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-21 09:32 , Processed in 0.185300 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表