wanchr
发表于 2023-11-29 09:20:13
飞雪神光 发表于 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 11:06:04
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))
wanchr
发表于 2023-11-29 13:03:53
飞雪神光 发表于 2023-11-29 11:06
这个去重函数可以运行,可是提出来的坐标精度还是有问题啊。
1、这个精度不足(setq entity-coordinates (append entity-coordinates (list (cdr (assoc 10 (entget entity))))))
2、这坐标精度有,可xyz分三行没法去重了,(setq entity-coordinates(mapcar (function (lambda (x) (rtos x 2 8))) (cdr (assoc 10 (entget entity))))))
帮我改下,谢谢
飞雪神光
发表于 2023-11-29 13:20:45
本帖最后由 飞雪神光 于 2023-11-29 13:26 编辑
wanchr 发表于 2023-11-29 13:03
这个去重函数可以运行,可是提出来的坐标精度还是有问题啊。
1、这个精度不足(setq entity-coordinates...
1.精度没有不足 我给你的去重有容差可以设置2这里求精度纯属多余了 不用纠结精度的问题 前面有人说过了 你看到的并不是他的实际精度 正常处理就行
wanchr
发表于 2023-11-29 14:05:02
飞雪神光 发表于 2023-11-29 13:20
1.精度没有不足 我给你的去重有容差可以设置2这里求精度纯属多余了 不用纠结精度的问题 前面有人说过了 ...
不是,去重后的写盘输出时精度不足,这个时候它肯定转成文本数字了。不是计算去重的精度不足啊
飞雪神光
发表于 2023-11-29 18:47:33
wanchr 发表于 2023-11-29 14:05
不是,去重后的写盘输出时精度不足,这个时候它肯定转成文本数字了。不是计算去重的精度不足啊
去重已经完成了 输出就用write-line princ 啥的 rtos设置输出精度
wzg356
发表于 2023-11-29 19:29:48
你的coordinates表结构是(list x1 y1 z1 x2 y2 z2......),这种不好比较去重
应该用这种(list(list x1 y1 z1)(list x2 y2 z2)......)
下面就可以去重
(if(not(member entity-coordinates coordinates))
(setq coordinates(cons entity-coordinates coordinates))
)
或
(if(vl-position entity-coordinates coordinates)
(setq coordinates(cons entity-coordinates coordinates))
)
wanchr
发表于 2023-11-29 20:47:30
本帖最后由 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-29 23:45:51
wanchr 发表于 2023-11-29 20:47
(defun extract-coordinates()
(setq aa (extract-entity-coordinates ss)) ; 这里是去重后对象的坐标 ...
你这不转换出来了么 可以导出了 保留三位rtos控制 (defun extract-coordinates()
(setq aa (extract-pts (ssget))) ; 这里是去重后对象的坐标信息
(setq bb (mapcar '(lambda (coord) (apply 'list (mapcar '(lambda (num) (rtos num 2 3)) coord))) aa))
)
飞雪神光
发表于 2023-11-29 23:55:48
rtos这么基础的函数都搞不懂还写什么代码 先把基础学明白再说吧 多逛论坛 少查GPT