乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 更改重复点的层

[复制链接]

13

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
71
发表于 2022-7-5 23:46:08 | 显示全部楼层 |阅读模式
大家好,
 
我有一张图,其中有许多点,其中东距和北距相同,但这些点的高程不同。我正在寻找lisp,它可以选择这些点,并将较高海拔的点分离到一个图层,将较低海拔的点分离到不同的图层。
 
提前感谢,祝所有用户新年快乐。
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:49:34 | 显示全部楼层
为了有机会得到正确的答案,您需要发布图形文件,以便做出响应的人能够知道点由什么组成,以及如何自动选择它们。
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 23:55:40 | 显示全部楼层
你是否试过拍摄正面视图,在那里可以立即看到不同的海拔高度?您甚至可以手动选择它们,这样就不用编写自己的lisp。
 
但是,和以往一样,张贴一张图纸将有助于给出最佳回复。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:58:02 | 显示全部楼层
CADWORKER,
 
假设我们讨论的是点实体,那么应该使用以下方法:
 
新年快乐!!
 
ymg公司
 
  1. (defun c:movdup (/ a b dl en enl i pl ss)
  2.   (setq pl nil  dl nil)
  3.   (princ "\nSelect Points: ")
  4.   (if (setq ss (ssget '((0 . "POINT"))))
  5.      (progn
  6.          (repeat (setq i (sslength ss))
  7.       (setq en (ssname ss (setq i (1- i)))
  8.                    pl (cons (cons (cdr (assoc 10 (entget en))) en) pl))              
  9.          )     
  10.          (setq pl (vl-sort pl (function (lambda (a b) (< (caddar a) (caddar b))))) ;; Sort on Z Coordinate     
  11.                pl (vl-sort pl (function (lambda (a b) (< (cadar a) (cadar b)))))   ;; Sort on Y Coordinate     
  12.                pl (vl-sort pl (function (lambda (a b) (< (caar a) (caar b)))))     ;; Sort on X Coordinate     
  13.                dl (vl-remove nil
  14.                      (mapcar '(lambda (a b) (if (equal (cdr (reverse (car a))) (cdr (reverse (car b)))) (cdr a)))
  15.                                 pl (append (cdr pl) (list (car pl)))
  16.                      )
  17.                   )
  18.          )
  19.       
  20.          ;; dl should now be a list of ename of duplicate points.                ;
  21.          
  22.          (foreach en dl
  23.             (setq enl (entget en))
  24.             (entmod (subst (cons 8 "Lower Duplicate Points") (assoc 8 enl) enl ))
  25.          )
  26.      )
  27.   )
  28. )  
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:00:28 | 显示全部楼层
我在这里回答了类似的问题:
 
http://www.cadtutor.net/forum/showthread.php?83202-Z坐标-将所有对象移动到0,并定义空间。
 
也许,你可以用它,但它和你的要求没什么不同。。。
 
没关系,新年快乐。。。
 
M、 R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:03:34 | 显示全部楼层
还有一种方法:
  1. ([color=BLUE]defun[/color] c:fixpoints ( [color=BLUE]/[/color] e i l s )
  2.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] s ([color=BLUE]ssget[/color] [color=MAROON]"_:L"[/color] '((0 . [color=MAROON]"POINT"[/color]))))
  3.        ([color=BLUE]progn[/color]
  4.            ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] i ([color=BLUE]sslength[/color] s))
  5.                ([color=BLUE]setq[/color] e ([color=BLUE]ssname[/color] s ([color=BLUE]setq[/color] i ([color=BLUE]1-[/color] i)))
  6.                      l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] ([color=BLUE]assoc[/color] 10 ([color=BLUE]entget[/color] e)) e) l)
  7.                )
  8.            )
  9.            ([color=BLUE]foreach[/color] x
  10.                (LM:groupbyfunction l
  11.                    ([color=BLUE]lambda[/color] ( a b )
  12.                        ([color=BLUE]equal[/color]
  13.                            ([color=BLUE]list[/color] ([color=BLUE]cadar[/color] a) ([color=BLUE]caddar[/color] a))
  14.                            ([color=BLUE]list[/color] ([color=BLUE]cadar[/color] b) ([color=BLUE]caddar[/color] b))
  15.                            1e-8
  16.                        )
  17.                    )
  18.                )
  19.                ([color=BLUE]foreach[/color] x ([color=BLUE]cdr[/color] ([color=BLUE]vl-sort[/color] x '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]>[/color] ([color=BLUE]last[/color] ([color=BLUE]car[/color] a)) ([color=BLUE]last[/color] ([color=BLUE]car[/color] b))))))
  20.                    ([color=BLUE]entmod[/color] ([color=BLUE]list[/color] ([color=BLUE]cons[/color] -1 ([color=BLUE]cdr[/color] x)) '(8 . [color=MAROON]"Lower Points"[/color])))
  21.                )
  22.            )
  23.        )
  24.    )
  25.    ([color=BLUE]princ[/color])
  26. )
  27. [color=GREEN];; Group By Function  -  Lee Mac[/color]
  28. [color=GREEN];; Groups items considered equal by a given predicate function[/color]
  29. ([color=BLUE]defun[/color] LM:groupbyfunction ( lst fun [color=BLUE]/[/color] tmp1 tmp2 x1 )
  30.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] x1 ([color=BLUE]car[/color] lst))
  31.        ([color=BLUE]progn[/color]
  32.            ([color=BLUE]foreach[/color] x2 ([color=BLUE]cdr[/color] lst)
  33.                ([color=BLUE]if[/color] (fun x1 x2)
  34.                    ([color=BLUE]setq[/color] tmp1 ([color=BLUE]cons[/color] x2 tmp1))
  35.                    ([color=BLUE]setq[/color] tmp2 ([color=BLUE]cons[/color] x2 tmp2))
  36.                )
  37.            )
  38.            ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] x1 ([color=BLUE]reverse[/color] tmp1)) (LM:groupbyfunction ([color=BLUE]reverse[/color] tmp2) fun))
  39.        )
  40.    )
  41. )
  42. ([color=BLUE]princ[/color])
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:06:59 | 显示全部楼层
李,
 
不知道效率低下的地方在哪里,但如果irun在5000点列表上修复了3个重复点。
 
我的时机越来越不好。在60到83秒之间(变化很大)。
 
相反,Movdup只需0.3秒。
 
  1. $ (c:fixpoints)
  2.     Fixpoints - Elapsed time: 66.2220 secs.
  3. _$ (c:movdup)
  4. Select Points:
  5.     Movdup - Elapsed time: 0.2970 secs.
  6. _$

 
ymg公司
测试重复。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:11:33 | 显示全部楼层
瓶颈可能是LM:groupbyfunction函数,因为如果重复项很少,该函数将在整个列表中迭代多次,重复项越多,效率就越高。
 
排序方法当然更优化,但是,这当然取决于排序算法,在按每个坐标排序时不会严重干扰列表项的相对位置?
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:12:16 | 显示全部楼层
李,
 
不知道OP的典型特征是什么。
 
但我希望你的函数能在三角测量中使用它。
通常情况下,你会在一个大的点列表中找到一些重复的点。
 
至于排序,三角剖分通常只需要对坐标的X值进行排序。
 
新年快乐
 
ymg公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:17:08 | 显示全部楼层
很抱歉让ymg失望了-我必须想一个更好的算法
 
祝你新年快乐!
 
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 21:25 , Processed in 0.585090 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表