明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 886|回复: 20

[提问] 请问图元信息里的10坐标组怎么提高他精度

[复制链接]
发表于 2023-11-28 18:51 | 显示全部楼层 |阅读模式
(setq a (list (cdr (assoc 10 (b))))),

通过10提取的精度好像不足,改单位里的精度也不起作用,你们是怎么处理的
谢谢帮我。
发表于 2023-11-29 11:06 | 显示全部楼层
wanchr 发表于 2023-11-29 09:20
(defun extract-entity-coordinates (ss)
  (setq coordinates '())

  1. (defun extract-pts (ss)
  2.         (defun BF-list-delsame (lst buzz)
  3.                 (if Lst
  4.                         (cons (car Lst)
  5.                                 (BF-list-delsame
  6.                                         (vl-remove-if
  7.                                                 '(lambda (x) (equal (car lst) x buzz))
  8.                                                 (cdr lst)
  9.                                         )
  10.                                         buzz
  11.                                 )
  12.                         )
  13.                 )
  14.         )
  15.   (if (sslength ss)
  16.     (progn
  17.                         (setq pts '())
  18.       (setq num (sslength ss))
  19.       (setq i 0)
  20.                         (while (< i num)
  21.         (setq ty (ssname ss i))
  22.         (setq tylx (cdr (assoc 0 (entget ty))))
  23.                                 (cond
  24.           ((= tylx "CIRCLE")
  25.                                                 (setq pts (append pts (list (cdr (assoc 10 (entget ty))))))
  26.                                         )
  27.                                 )
  28.                                 (setq i (1+ i))
  29.       )
  30.                 )
  31.   )
  32.         (BF-list-delsame pts 0.1)
  33. )
  34. (extract-pts (ssget))
 楼主| 发表于 2023-11-29 09:20 | 显示全部楼层
飞雪神光 发表于 2023-11-29 08:28
导出之前就去重 明经上找个去重函数 还有再回复我 请点击下方的回复 否则看不到
                       ...

(defun extract-entity-coordinates (ss)
  (setq coordinates '())

  (if (sslength ss)
    (progn
      (setq total-entities (sslength ss))
      (setq i 0)

      (while (< i total-entities)
        (setq entity (ssname ss i))
        (setq entity-type (cdr (assoc 0 (entget entity))))

        (cond
          ((= entity-type "CIRCLE")
              (setq entity-coordinates(mapcar (function (lambda (x) (rtos x 2 8))) (cdr (assoc 10 (entget entity))))))
         ; 上面一行怎么把xyz,连起来,用于下面的比较
          (t
           (setq entity-coordinates '()))
        )

        (setq coordinates (append coordinates entity-coordinates)) ;这里比较去重,二个表怎么比较啊,
        (setq i (1+ i))
      )
    )
  )

  coordinates
)
把用到的函数告诉我啊,我水货不知道怎么弄。
 楼主| 发表于 2023-11-29 20:47 | 显示全部楼层
本帖最后由 wanchr 于 2023-11-29 20:58 编辑
飞雪神光 发表于 2023-11-29 18:47
去重已经完成了 输出就用write-line princ 啥的 rtos设置输出精度

(defun extract-coordinates()
  (setq aa (extract-entity-coordinates ss)) ; 这里是去重后对象的坐标信息
(setq bb (mapcar (lambda (coord)
                                  (apply 'list (mapcar (lambda (num)
                                                        (rtos num 2 8))
                                                      coord)))
                               aa)))
aa里面是下面这种坐标
((1.48815e+06 1.10276e+06 1.46543e-06)
(1.48915e+06 1.10276e+06 1.46543e-06))
上面转换不成功,到底要怎么处理这个数据吗。rtos 这个函数真搞不懂,我是想他保留3位小数的。
发表于 2023-11-28 19:02 | 显示全部楼层
如果是代码中的运算不需要处理 如果需要导出用(rtos x 2 9)
 楼主| 发表于 2023-11-28 19:16 | 显示全部楼层
rtos 处理的x是哪里来的,
(assoc 10 (b)) 得到的(10 324559.0 707949.0 0.0),带着括号 。
我目的是在框选的对象中提取坐标。
发表于 2023-11-28 19:29 | 显示全部楼层
提取之后做什么? 是运算还是导出文本 x就是 坐标中的 三个值
发表于 2023-11-28 19:43 | 显示全部楼层
(defun c:ttpt ()
(setq entsel^ (entsel "\选择直线试试..."))
(setq pt (cdr (assoc 10 (entget (car entsel^)))))
(mapcar (function (lambda (x) (rtos x 2 8))) pt)
)
;返回结果所示("15270.12355823" "5956.51764391" "0.00000000")
发表于 2023-11-28 20:12 | 显示全部楼层
你提取的10组码后,所见并不是所得,它的实际精度要大的多的多,用rtos设置一个需要的精度转为字符串后,你就能看到了
 楼主| 发表于 2023-11-28 21:38 | 显示全部楼层
(setq entity-coordinates(mapcar (function (lambda (x) (rtos x 3 8))) (cdr (assoc 10 (entget entity))))))
这句话确实能弄到坐标,可是他有缺陷,问题出在哪里
23284'-1.23880236"
58995'-8.70445769"
0.00000000"
这是提到txt的坐标
可实际我看到的图元信息是:
((-1 . <图元名: 2088797cef0>) (0 . CIRCLE) (330 . <图元名: 20887974820>) (5 . 1BB7) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 1507) (100 . AcDbCircle) (10 279409.0 707949.0 0.0) (40 . 200.0) (210 0.0 0.0 1.0))
大哥们这是哪里出问题了啊。
发表于 2023-11-28 22:03 | 显示全部楼层
wanchr 发表于 2023-11-28 21:38
(setq entity-coordinates(mapcar (function (lambda (x) (rtos x 3 8))) (cdr (assoc 10 (entget entity)) ...

(rtos x 3 8) 是2 8 不是3 8
 楼主| 发表于 2023-11-28 22:38 | 显示全部楼层
本帖最后由 wanchr 于 2023-11-28 22:40 编辑

哥你真行,换上2 8 果然行了,再问一下,能把x y z 放一行,就是把xyz,放一行,我想要比较他们,删掉重复出现过坐标,只留下唯一 ,请问要怎么处理。怎么给文本里的数据去重
发表于 2023-11-29 08:28 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-11-29 08:29 编辑
wanchr 发表于 2023-11-28 22:38
哥你真行,换上2 8 果然行了,再问一下,能把x y z 放一行,就是把xyz,放一行,我想要比较他们,删掉重复出 ...

导出之前就去重 明经上找个去重函数 还有再回复我 请点击下方的回复 否则看不到
                      ↓
                      ↓
                      ↓
                      ↓
                      ↓
                      ↓
                      ↓
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 20:33 , Processed in 0.302885 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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