明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1406|回复: 11

[提问] 删除点表中重复的点遇到的问题

[复制链接]
发表于 2024-1-25 11:17:43 | 显示全部楼层 |阅读模式
本帖最后由 gisshow 于 2024-1-25 11:20 编辑
  1. ;;删除表中重复元素------------------------------------------------------------------------------
  2. (defun delsame1( biao )
  3.   (if biao
  4.     (cons (car biao) (delsame1 (vl-remove (car biao) (cdr biao))));
  5.   );结束if
  6. );结束defun

上面的代码来自论坛
命令: !no_lst
((378.845 90.5753 0.0) (378.845 90.5753 0.0))

命令: (delsame1 no_lst)
((378.845 90.5753 0.0) (378.845 90.5753 0.0))

命令: (= (car no_lst) (cadr no_lst))
nil

命令: (car no_lst)
(378.845 90.5753 0.0)

命令: (cadr no_lst)
(378.845 90.5753 0.0)

两个点似乎是相等的 但是无法消去重复的 是不是有精度问题 怎么解决 谢过了
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-1-25 11:44:49 | 显示全部楼层
本帖最后由 tomonkey239 于 2024-1-25 11:55 编辑

最近刚好在研究这个点,表问题。借楼主的平台求教一个问题;
就是想实现功能是圆弧双线的变单线:同一个圆心的,怎么把他归为一类,或者一个表里面。用cons  append ,这个函数不知道怎么实(setq yx (cons yx-ls1 yx))),这个出来的怎么不是所有圆心的一个表呢?
(defun c:tt()
        (setq
                s1 (ssget    '((0 . "ARC") ) )
                s-sum (sslength s1)
                n 0
                s2 '( )
        )
        (if s1
                (progn
                        (repeat s-sum
                                (setq
                                        s-data (entget(ssname s1 n))
                                        yx-ls1  (list (cdr(assoc 10 s-data)) )
                                  n (1+ n)
                          yx (cons yx-ls1 yx)
                                )
                                (print n)
                                (print yx )
                        )
                )
        )
        (princ)
)


 楼主| 发表于 2024-1-25 12:55:40 | 显示全部楼层
本帖最后由 gisshow 于 2024-1-25 12:59 编辑
tomonkey239 发表于 2024-1-25 11:44
最近刚好在研究这个点,表问题。借楼主的平台求教一个问题;
就是想实现功能是圆弧双线的变单线:同一个圆 ...
  1. ;;获取选择圆弧的圆心表
  2. (defun c:tt()
  3.   (setq yx_lst nil);表置空
  4.   (setq ss(ssget));选择集
  5.   (setq n(sslength ss));选择集长度
  6.   (setq i 0);计数归零
  7.   (repeat n;对选择集中每个元素
  8.     (setq en(ssname ss i));获取图元名
  9.     (setq el(entget en));获取数据表
  10.     (setq e(cdr(assoc 0 el)));获取图元类型
  11.     (if (= e "ARC");如果图元类型为圆弧
  12.       (progn
  13.         (setq no10 (cdr (assoc 10 el)));获取圆心点
  14.         (setq yx_lst(cons no10 yx_lst));添加到点表
  15.       );结束progn
  16.     );结束if
  17.    (setq i (+ i 1));计数+1
  18.   );结束repeat
  19. );结束defun
发表于 2024-1-25 16:42:21 | 显示全部楼层
高效查找表中重复元素及去重复
http://bbs.mjtd.com/forum.php?mo ... &fromuid=202795
(出处: 明经CAD社区)

  1. (defun delsame(l1 rcz / l2);;带容差去重(重复过的取第一次出现),有时处理坐标点需要考虑容差
  2.   (while l1
  3.     (setq l2(cons(car l1)l2)l1(vl-remove-if'(lambda (x)(equal(car l1)x rcz))(cdr l1))))
  4.   (reverse l2))

  5. (defun delsames(l1 rcz / a l l2);;带容差去重(重复过的不出现),有时处理坐标点需要考虑容差
  6.   (while(setq a(car l1)l2(vl-remove-if'(lambda (x)(equal a x rcz))(cdr l1)))
  7.     (if(=(1+(length l2))(length l1))(setq l(cons a l)))
  8.     (setq l1 l2))
  9.   (if(=(1+(length l2))(length l1))(setq l(cons a l)))
  10.   (reverse l))
 楼主| 发表于 2024-1-25 12:39:46 | 显示全部楼层
查到的版主在另一个帖子的回复
vl-remove只能删除具有 = 概念的子项,而不能删除 equal 概念的子项
http://bbs.mjtd.com/forum.php?mo ... highlight=vl-remove

找到了一个退而求其次的解决方法  降低点表的精度
发表于 2024-1-25 13:52:22 | 显示全部楼层
本帖最后由 vitalgg 于 2024-1-25 13:57 编辑








无需复制粘贴,在 您的 lsp 代码前加上一行代码,即可使用 上面提到的函数。
  1. (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))

本帖子中包含更多资源

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

x
发表于 2024-1-25 13:55:12 | 显示全部楼层
感谢感谢,如果要把相同的圆心的圆弧找出来,要怎么找。找出来就好办,重新画个圆弧,然后删掉原来的圆弧,达到圆弧双线变单线的效果。
发表于 2024-1-25 13:58:33 | 显示全部楼层
 楼主| 发表于 2024-1-25 14:05:57 | 显示全部楼层
tomonkey239 发表于 2024-1-25 13:55
感谢感谢,如果要把相同的圆心的圆弧找出来,要怎么找。找出来就好办,重新画个圆弧,然后删掉原来的 ...

不知道你的具体要求是什么
如果所有同心圆都有两个半径 且两个半径相同
则删除所有同心圆 然后对每个圆心点 使用entmake创建圆 就得到单线圆了
发表于 2024-1-25 14:21:05 | 显示全部楼层
本帖最后由 vitalgg 于 2024-1-25 14:23 编辑
tomonkey239 发表于 2024-1-25 13:55
感谢感谢,如果要把相同的圆心的圆弧找出来,要怎么找。找出来就好办,重新画个圆弧,然后删掉原来的 ...

是重复的圆弧吧。
需要同圆心 dxf10,同半径dxf40,同起点角dxf50,同终点角dxf51
这四项都相近一个限值,即可认为是重复的弧。

CAD命令 overkill 也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 23:40 , Processed in 0.221837 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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