乐筑天下

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

[编程交流] 请帮助:)Lisp检测

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:53:38 | 显示全部楼层 |阅读模式
大家好。我一直在试图找到一个lisp,它可以检测指定图层的多段线是否位于另一个指定图层的多段线内。
 
我想检查图层(图层1、图层2和图层3….)下的闭合多段线是否正确位于第4层下的闭合多段线内。
 
我希望有人明白我说的话。我在AutoCAD中所能做的最好的事情就是创建宏,而这是无法做到的
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:10:39 | 显示全部楼层
你好
 
确保在屏幕上完全看到选定多段线的边界,否则程序可能会失败或无法检测到所有多段线对象。
  1. (defun c:test (/ sn ss dis div s in l)
  2. (princ "\nPick a closed polyline :")
  3. (if (setq s (ssget "_+.:S:E" '((0 . "*POLYLINE") (8 . "Layer4") (-4 . "&=") (70 . 1))))
  4.    (progn
  5.      (setq sn  (ssname s 0)
  6.            dis (/ (vlax-curve-getdistatparam
  7.                     sn
  8.                     (fix (vlax-curve-getendparam sn))
  9.                   )
  10.                   100.
  11.                )
  12.            div dis
  13.      )
  14.      (repeat 100
  15.        (setq l (cons (vlax-curve-getpointatdist sn dis) l))
  16.        (setq dis (+ div dis))
  17.      )
  18.      (if (setq
  19.            ss (ssget "_WP"
  20.                      l
  21.                      '((0 . "*POLYLINE") (8 . "Layer1,Layer2,Layer3"))
  22.               )
  23.          )
  24.        (sssetfirst nil ss)
  25.      )
  26.    )
  27. )
  28. (princ)
  29. )
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:12:43 | 显示全部楼层
那是法斯特·塔瓦特。
 
虽然程序很好,但如果第1层、第2层或第3层下的任何多段线不完全在第4层内,是否可能提示错误消息?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:24:42 | 显示全部楼层
 
试试这个:
  1. (defun c:test (/ lays fnd sn ss dis div s lst lay l)
  2. ;; Tharwat - 07.Dec.2016 ;;
  3. (princ "\nPick on closed polyline :")
  4. (if (setq lays "Layer1,Layer2,Layer3"
  5.            fnd  0
  6.            s    (ssget "_+.:S:E"
  7.                        '((0 . "*POLYLINE") (8 . "Layer4") (-4 . "&=") (70 . 1))
  8.                 )
  9.      )
  10.    (progn
  11.      (setq sn  (ssname s 0)
  12.            dis (/ (vlax-curve-getdistatparam
  13.                     sn
  14.                     (fix (vlax-curve-getendparam sn))
  15.                   )
  16.                   100.
  17.                )
  18.            div dis
  19.      )
  20.      (repeat 100
  21.        (setq l (cons (vlax-curve-getpointatdist sn dis) l))
  22.        (setq dis (+ div dis))
  23.      )
  24.      (if (setq
  25.            ss (ssget "_WP" l (list '(0 . "*POLYLINE") (cons 8 lays)))
  26.          )
  27.        (while (and (/= fnd 3)
  28.                    (setq sn (ssname ss 0))
  29.               )
  30.          (and (wcmatch (setq lay (cdr (assoc 8 (entget sn)))) lays)
  31.               (not (member lay lst))
  32.               (setq lst (cons lay lst))
  33.               (setq fnd (length lst))
  34.          )
  35.          (ssdel sn ss)
  36.        )
  37.      )
  38.      (cond
  39.        ((= fnd 3) (princ "\nAll layers are found "))
  40.        ((>= fnd 1)
  41.         (princ
  42.           (strcat
  43.             "\nPolylines' layers ["
  44.             (vl-string-right-trim
  45.               ","
  46.               (apply 'strcat (mapcar '(lambda (u) (strcat u ",")) lst))
  47.             )
  48.             "]."
  49.           )
  50.         )
  51.        )
  52.        ((princ "\nNo polylines found on specified layers <!>"))
  53.      )
  54.    )
  55. )
  56. (princ)
  57. )(vl-load-com)
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:30:46 | 显示全部楼层
效果很好!非常感谢。
 
一个简单的问题是,我如何将“选择对象:”更改为“选择对象:”因为我将只选择一个对象
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:42:09 | 显示全部楼层
 
使用entsel/entsel代替ssget,并修改一半代码。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:49:14 | 显示全部楼层
显然,有一种方法可以抑制默认的ssget提示(但我认为它在BricsCAD中效果不好)。
  1. (prompt ...)
  2. (setvar 'nomutt 1)
  3. (ssget ...)
  4. (setvar 'nomutt 0)
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:58:26 | 显示全部楼层
我还有一个问题,当(Layer1,Layer2,Layer3)下的一条或多条多段线位于Layer4之上时,我希望将其视为在多段线内。如果它在外面,它只会将其排除在外。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:13 , Processed in 0.462030 second(s), 68 queries .

© 2020-2025 乐筑天下

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