请问图元信息里的10坐标组怎么提高他精度
(setq a (list (cdr (assoc 10 (b))))),通过10提取的精度好像不足,改单位里的精度也不起作用,你们是怎么处理的
谢谢帮我。
wanchr 发表于 2023-11-29 09:20
(defun extract-entity-coordinates (ss)
(setq coordinates '())
(defun extract-pts (ss)
(defun BF-list-delsame (lst buzz)
(if Lst
(cons (car Lst)
(BF-list-delsame
(vl-remove-if
'(lambda (x) (equal (car lst) x buzz))
(cdr lst)
)
buzz
)
)
)
)
(if (sslength ss)
(progn
(setq pts '())
(setq num (sslength ss))
(setq i 0)
(while (< i num)
(setq ty (ssname ss i))
(setq tylx (cdr (assoc 0 (entget ty))))
(cond
((= tylx "CIRCLE")
(setq pts (append pts (list (cdr (assoc 10 (entget ty))))))
)
)
(setq i (1+ i))
)
)
)
(BF-list-delsame pts 0.1)
)
(extract-pts (ssget)) 飞雪神光 发表于 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
)
把用到的函数告诉我啊,我水货不知道怎么弄。 本帖最后由 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位小数的。
如果是代码中的运算不需要处理 如果需要导出用(rtos x 2 9) rtos 处理的x是哪里来的,
(assoc 10 (b)) 得到的(10 324559.0 707949.0 0.0),带着括号 。
我目的是在框选的对象中提取坐标。 提取之后做什么? 是运算还是导出文本 x就是 坐标中的 三个值 (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") 你提取的10组码后,所见并不是所得,它的实际精度要大的多的多,用rtos设置一个需要的精度转为字符串后,你就能看到了 (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))
大哥们这是哪里出问题了啊。 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 本帖最后由 wanchr 于 2023-11-28 22:40 编辑
哥你真行,换上2 8 果然行了,再问一下,能把x y z 放一行,就是把xyz,放一行,我想要比较他们,删掉重复出现过坐标,只留下唯一 ,请问要怎么处理。怎么给文本里的数据去重
本帖最后由 飞雪神光 于 2023-11-29 08:29 编辑
wanchr 发表于 2023-11-28 22:38
哥你真行,换上2 8 果然行了,再问一下,能把x y z 放一行,就是把xyz,放一行,我想要比较他们,删掉重复出 ...
导出之前就去重 明经上找个去重函数 还有再回复我 请点击下方的回复 否则看不到
↓
↓
↓
↓
↓
↓
↓