乐筑天下

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

[编程交流] 选择重复点

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:29:30 | 显示全部楼层 |阅读模式
你好
这是我的第一篇帖子,我是Autolisp新手。希望我不会打扰你。
 
因此,我制作了一个包含1000多个点的嵌套列表,其中的x,y,z坐标如下所示:
 
'((x y z)(x y z).)
 
在这个列表中有两个点;相同的X和Y,但不同的Z。我需要做的是选择Z更大的,并改变它们的层。
 
如果这是一项可能完成的任务,你能给我一些提示吗?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:34:02 | 显示全部楼层
听起来你在处理点实体?
 
是否希望使用最大Z轴值在每个公共位置处结束一个点,并删除该X Y位置处的所有其他点?
 
对此可能有很多不同的方法:
 
  1. [b][color=BLACK]([/color][/b]defun c:maxz-dpt [b][color=FUCHSIA]([/color][/b]/ lst f r c x[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq lst '[b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]2 2 3[b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]2 2 4[b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]2 3 5[b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]2 2 1[b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]6 5 4[b][color=MAROON])[/color][/b]
  3.              [b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [color=#8b4513];;VVA[/color]
  5. [b][color=FUCHSIA]([/color][/b]defun round [b][color=NAVY]([/color][/b]num prec[b][color=NAVY])[/color][/b]
  6. [b][color=NAVY]([/color][/b]* prec [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]minusp num[b][color=GREEN])[/color][/b]
  7.              [b][color=GREEN]([/color][/b]fix [b][color=BLUE]([/color][/b]- [b][color=RED]([/color][/b]/ num prec[b][color=RED])[/color][/b] 0.5[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  8.              [b][color=GREEN]([/color][/b]fix [b][color=BLUE]([/color][/b]+ [b][color=RED]([/color][/b]/ num prec[b][color=RED])[/color][/b] 0.5[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  9. [b][color=FUCHSIA]([/color][/b]initget 6[b][color=FUCHSIA])[/color][/b]
  10. [b][color=FUCHSIA]([/color][/b]setq f [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nPoint Value Tolerence <0.001>:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  11. [b][color=FUCHSIA]([/color][/b]or f [b][color=NAVY]([/color][/b]setq f 0.001[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  12. [b][color=FUCHSIA]([/color][/b]setq c nil[b][color=FUCHSIA])[/color][/b]
  13. [b][color=FUCHSIA]([/color][/b]foreach p lst
  14.     [b][color=NAVY]([/color][/b]setq r [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]round [b][color=BLUE]([/color][/b]car p[b][color=BLUE])[/color][/b] f[b][color=GREEN])[/color][/b]
  15.                   [b][color=GREEN]([/color][/b]round [b][color=BLUE]([/color][/b]cadr p[b][color=BLUE])[/color][/b] f[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  16.     [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]assoc r c[b][color=MAROON])[/color][/b]
  17.         [b][color=MAROON]([/color][/b]setq c [b][color=GREEN]([/color][/b]subst [b][color=BLUE]([/color][/b]append [b][color=RED]([/color][/b]assoc r c[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]caddr p[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  18.                        [b][color=BLUE]([/color][/b]assoc r c[b][color=BLUE])[/color][/b] c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  19.         [b][color=MAROON]([/color][/b]setq c [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]append [b][color=RED]([/color][/b]list r[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]caddr p[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  20. [b][color=FUCHSIA]([/color][/b]foreach p c
  21.    [b][color=NAVY]([/color][/b]setq x [b][color=MAROON]([/color][/b]append [b][color=GREEN]([/color][/b]car p[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]apply 'max [b][color=RED]([/color][/b]cdr p[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  22.    [b][color=NAVY]([/color][/b]prin1 x[b][color=NAVY])[/color][/b]
  23.    [b][color=NAVY]([/color][/b]princ[color=#2f4f4f]"\n"[/color][b][color=NAVY])[/color][/b]
  24.    [color=#8b4513];;;WHAT TO DO HERE ???[/color]
  25.    [b][color=FUCHSIA])[/color][/b]
  26. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
处理点值时,最好使用模糊因子或舍入因子。
 
-大卫
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:40:39 | 显示全部楼层
大卫,非常感谢你的回复。
 
是的,我在处理点实体。
 
这是我列出清单的代码。我把图案改成
(x y z x y z….)
  1. (defun d(/ a c)
  2.                 (setq a (ssget))
  3.                 (setq i 0)
  4.                 (setq b (cdr(assoc 10 (entget(ssname a i)))))
  5.                 (setq c b)
  6.                 (setq n (sslength a))
  7.         (repeat (1- n)
  8. (setq i (1+ i))
  9. (setq b (cdr(assoc 10 (entget(ssname a i)))))  
  10. (setq c (append c b))
  11.         )
  12. )

Civil 3d无法三角化重复点,我必须使用墙特征线。
在这里和那里,图形具有重复点(完全相同的X和Y,不同的Z)。我想找到他们并改变
Z值较高的图层,供以后用于绘制多段线和定义墙特征线。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:42:55 | 显示全部楼层
这应该选择Z坐标值大于零的点。
 
  1. (setq ss (ssget '((0 . "POINT")(-4 . "*,*,>")(10 0. 0. 0.))))
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:47:29 | 显示全部楼层
我绝对不会像你描述的那样创建列表。
 
也许是这样:
 
  1. [b][color=BLACK]([/color][/b]defun c:maxz-dpt [b][color=FUCHSIA]([/color][/b]/ l lst f r c x np xp ss i en ed[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq l [color=#2f4f4f]"NEW-LAYER"[/color][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"POINT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.       [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
  5.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  6.              [b][color=MAROON]([/color][/b]setq lst [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 10 [b][color=PURPLE]([/color][/b]entget en[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] lst[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  7.              [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [color=#8b4513];;VVA[/color]
  9. [b][color=FUCHSIA]([/color][/b]defun round [b][color=NAVY]([/color][/b]num prec[b][color=NAVY])[/color][/b]
  10. [b][color=NAVY]([/color][/b]* prec [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]minusp num[b][color=GREEN])[/color][/b]
  11.              [b][color=GREEN]([/color][/b]fix [b][color=BLUE]([/color][/b]- [b][color=RED]([/color][/b]/ num prec[b][color=RED])[/color][/b] 0.5[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  12.              [b][color=GREEN]([/color][/b]fix [b][color=BLUE]([/color][/b]+ [b][color=RED]([/color][/b]/ num prec[b][color=RED])[/color][/b] 0.5[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  13. [b][color=FUCHSIA]([/color][/b]initget 6[b][color=FUCHSIA])[/color][/b]
  14. [b][color=FUCHSIA]([/color][/b]setq f [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nPoint Value Tolerence <0.001>:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  15. [b][color=FUCHSIA]([/color][/b]or f [b][color=NAVY]([/color][/b]setq f 0.001[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  16. [b][color=FUCHSIA]([/color][/b]setq c nil[b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]foreach p lst
  18.     [b][color=NAVY]([/color][/b]setq r [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]round [b][color=BLUE]([/color][/b]car p[b][color=BLUE])[/color][/b] f[b][color=GREEN])[/color][/b]
  19.                   [b][color=GREEN]([/color][/b]round [b][color=BLUE]([/color][/b]cadr p[b][color=BLUE])[/color][/b] f[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  20.     [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]assoc r c[b][color=MAROON])[/color][/b]
  21.         [b][color=MAROON]([/color][/b]setq c [b][color=GREEN]([/color][/b]subst [b][color=BLUE]([/color][/b]append [b][color=RED]([/color][/b]assoc r c[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]caddr p[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  22.                        [b][color=BLUE]([/color][/b]assoc r c[b][color=BLUE])[/color][/b] c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  23.         [b][color=MAROON]([/color][/b]setq c [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]append [b][color=RED]([/color][/b]list r[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]caddr p[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  24. [b][color=FUCHSIA]([/color][/b]foreach p c
  25.    [b][color=NAVY]([/color][/b]setq x [b][color=MAROON]([/color][/b]append [b][color=GREEN]([/color][/b]car p[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]apply 'max [b][color=RED]([/color][/b]cdr p[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  26.    [b][color=NAVY]([/color][/b]prin1 x[b][color=NAVY])[/color][/b]
  27.    [b][color=NAVY]([/color][/b]princ[color=#2f4f4f]"\n"[/color][b][color=NAVY])[/color][/b]
  28.    [b][color=NAVY]([/color][/b]setq np [b][color=MAROON]([/color][/b]mapcar '- x [b][color=GREEN]([/color][/b]list f f f[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  29.          xp [b][color=MAROON]([/color][/b]mapcar '+ x [b][color=GREEN]([/color][/b]list f f f[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  30.    [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]setq ss [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"POINT"[/color][b][color=RED])[/color][/b]
  31.                                   [b][color=RED]([/color][/b]cons -4 [color=#2f4f4f]"<AND"[/color][b][color=RED])[/color][/b]
  32.                                      [b][color=RED]([/color][/b]cons -4 [color=#2f4f4f]">=,>=,>="[/color][b][color=RED])[/color][/b]
  33.                                        [b][color=RED]([/color][/b]cons 10 np[b][color=RED])[/color][/b]
  34.                                      [b][color=RED]([/color][/b]cons -4 [color=#2f4f4f]"<=,<=,<="[/color][b][color=RED])[/color][/b]
  35.                                        [b][color=RED]([/color][/b]cons 10 xp[b][color=RED])[/color][/b]
  36.                                    [b][color=RED]([/color][/b]cons -4 [color=#2f4f4f]"AND>"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  37.         [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b]
  38.               ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  39.         [b][color=MAROON]([/color][/b]entmod [b][color=GREEN]([/color][/b]subst [b][color=BLUE]([/color][/b]cons 8 l[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]assoc 8 ed[b][color=BLUE])[/color][/b] ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  40. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
-大卫
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:49:09 | 显示全部楼层
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:53:48 | 显示全部楼层
You're welcome.  Interesting project.
 
You should probably check to see if there any points already existing on the new layer.
 
I imagine this could be slow on a very large drawing.
 
Have fun ! -David
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:56:51 | 显示全部楼层
I've run the code in a drawing that has 1341 points. It took less than 4 seconds on a core i7 laptop.
 
New layer has 1230 points, old layer has 111. All in all no duplicates in the same layer. Perfecto!
 
Thank you very much indeed. Now I'm going to learn the coding.
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:02:13 | 显示全部楼层
Nice one David
 
The following may offer some performance improvements:

[code](defun c:dpz ( / a e f i l n p q s )   (setq n '(8 . "DPZ-LAYER") ;; New Layer         f  0.001             ;; Tolerance   )   (if (setq s (ssget "_:L" '((0 . "POINT"))))       (progn           (repeat (setq i (sslength s))               (if (setq e (entget (ssname s (setq i (1- i))))                         p (assoc 10 e)                         q (list (round (cadr p) f) (round (caddr p) f))                         a (assoc q l)                   )                   (if (
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:06:24 | 显示全部楼层
Thanks to you too Lee.
 
Your code ran instantly. Performance indeed improved.
Civil 3d event viewer notifies there are 107 duplicate points and your code found 107.
David's code found 111.
I don't think i have the required skill to find the cause yet.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:58 , Processed in 0.566494 second(s), 72 queries .

© 2020-2025 乐筑天下

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