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
页: 1 [2] 3
查看完整版本: 请问图元信息里的10坐标组怎么提高他精度