乐筑天下

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

[编程交流] 按名称和rota选择块

[复制链接]

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 17:02:04 | 显示全部楼层 |阅读模式
大家好,
我有一个lisp,它按旋转角度选择块,但它选择所有具有相同旋转角度的块实例。我需要过滤结果,以仅选择选定的块实例。。任何帮助都将不胜感激。。。提前感谢
  1. (defun C:SSR ( / s1 i e l f o n s2)
  2. (princ "\nSelect source object:")
  3. (if
  4.    (if
  5.      (setq s1 (ssget "I" '((0 . "INSERT"))))
  6.      (progn (sssetfirst nil nil) s1)
  7.      (setq s1 (ssget '((0 . "INSERT"))))
  8.    )
  9.    (progn
  10.      (repeat (setq i (sslength s1))
  11.        (setq i (1- i)
  12.              o (vlax-ename->vla-object (ssname s1 i))
  13.              e (entget (ssname s1 i))
  14.              l (mapcar '(lambda (a b) (cond ((assoc a e)) (b))) '(0 8 6 62) '(0 0 (6 . "ByLayer") (62 . 256)))
  15.              n (cons (vlax-get o (if (vlax-property-available-p o 'EffectiveName) 'rotation 'EffectiveName)) n)
  16.              )
  17.        (if (not (member l f)) (setq f (cons l f)))
  18.        )
  19.      (setq f (mapcar '(lambda (a) (append '((-4 . "<AND")) a '((-4 . "AND>")))) f))
  20.      (setq f (append '((-4 . "<OR")) (apply 'append f) '((-4 . "OR>"))))
  21.      (princ "\n\nSelect area for similar blocks...")
  22.      (if (setq s2 (ssget f))
  23.        (repeat (setq i (sslength s2))
  24.          (if
  25.            (not (member (vlax-get (setq o (vlax-ename->vla-object (setq e (ssname s2 (setq i (1- i)))))) (if (vlax-property-available-p o 'EffectiveName) 'rotation 'EffectiveName)) n))
  26.            (ssdel e s2)
  27.            )
  28.          )
  29.        )
  30.      (if s2 (princ (strcat (itoa (sslength s2)) " objects")))
  31.      (sssetfirst nil s2)
  32.      )
  33.    )
  34. (if (zerop (getvar 'cmdactive)) (princ) s2)
  35. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:07:04 | 显示全部楼层
提到作者的名字是一种很好的方式。
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 17:09:41 | 显示全部楼层
 
是的,如果你知道作者的名字,这是很好的方式。。。但我不知道,因为我有250个lisp文件,我从几年前使用,我不知道我在哪里找到他们。。。
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 17:14:17 | 显示全部楼层
没关系,Grrr。这是我的错,我的Lisp程序。
 
@handasa:
我猜您使用的是不同的lisp,它通过旋转选择所有块。您发布的lisp正在按名称选择块。这是如何通过旋转将其修改为过滤块。
  1. '(0 8 6 [color=red][b]50[/b][/color] 62) '(0 0 (6 . "ByLayer") [b][color=red](50 . 0.0)[/color][/b] (62 . 256)))
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:19:37 | 显示全部楼层
这令人难以置信:
  1. (if (vlax-property-available-p o 'EffectiveName) 'rotation 'EffectiveName)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:21:14 | 显示全部楼层
这是一个很好的代码,斯特凡!这就是为什么我认为作者应该得到一些赞赏。
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 17:26:13 | 显示全部楼层
没有看到。我在原始代码中进行了更改和测试。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:30:57 | 显示全部楼层
一些替代方案:
  1. (defun C:test ; Written by: Grrr, credits to: Lee Mac, Tharwat
  2. ( / PropsLst SS sBe sBo srcLst i dBe dBo dstLst )
  3. (setq PropsLst (list 'EffectiveName 'Layer 'Linetype 'Rotation 'TrueColor)) ; <- list of required properties
  4. (and (setq SS (ssget "_I" (list (cons 0 "INSERT")))) (sssetfirst nil nil))
  5. (setvar 'errno 0)
  6. (while (/= 52 (getvar 'errno))
  7.         (setq sBe (car (entsel "\nSelect source block:" )))
  8.         (cond
  9.                 ( (and sBe (eq (vla-get-ObjectName (setq sBo (vlax-ename->vla-object sBe))) "AcDbBlockReference"))
  10.                         (setq srcLst
  11.                                 (mapcar
  12.                                         (function
  13.                                                 (lambda (x)
  14.                                                         (if (not (eq x 'TrueColor))
  15.                                                                 (vlax-get sBo x)
  16.                                                                 (mapcar
  17.                                                                         (function
  18.                                                                                 (lambda (p)
  19.                                                                                         (vlax-get (vlax-get sBo 'TrueColor) p)
  20.                                                                                 )
  21.                                                                         )
  22.                                                                         (list 'ColorIndex 'Red 'Green 'Blue)
  23.                                                                 )
  24.                                                         ); if
  25.                                                 )
  26.                                         )
  27.                                         PropsLst
  28.                                 )
  29.                         )
  30.                         (setvar 'errno 52)
  31.                 )
  32.                 ( T nil )
  33.         )
  34. )
  35. (if
  36.         (and
  37.                 sBe
  38.                 (or SS
  39.                         (and
  40.                                 (princ "\nSelect blocks to be filtered: ")
  41.                                 (setq SS
  42.                                         (ssget
  43.                                                 (vl-remove nil
  44.                                                         (list
  45.                                                                 (cons 0 "INSERT")
  46.                                                                 (if (member 'EffectiveName PropsLst) (cons 2 (strcat "`*U*," (vla-get-EffectiveName sBo))))
  47.                                                         )
  48.                                                 )
  49.                                         )
  50.                                 )
  51.                         )
  52.                 )
  53.         )
  54.         (repeat (setq i (sslength SS))
  55.                 (setq dBo (vlax-ename->vla-object (setq dBe (ssname SS (setq i (1- i))))))
  56.                 (setq dstLst
  57.                         (mapcar
  58.                                 (function
  59.                                         (lambda (x)
  60.                                                 (if (not (eq x 'TrueColor))
  61.                                                         (vlax-get dBo x)
  62.                                                         (mapcar
  63.                                                                 (function
  64.                                                                         (lambda (p)
  65.                                                                                 (vlax-get (vlax-get dBo 'TrueColor) p)
  66.                                                                         )
  67.                                                                 )
  68.                                                                 (list 'ColorIndex 'Red 'Green 'Blue)
  69.                                                                 )
  70.                                                         ); if
  71.                                                 )
  72.                                 )
  73.                                 PropsLst
  74.                         )
  75.                 )
  76.                 (and (not (equal srcLst dstLst)) (ssdel dBe SS))
  77.         )
  78. )
  79. (sssetfirst nil SS)
  80. (princ)
  81. );| defun |; (or vlax-get-acad-object (vl-load-com)) (princ)

但不支持多个源块引用。
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 17:34:43 | 显示全部楼层
@Grrr
@斯特凡BMR
非常感谢你们和你们的宝贵贡献。。。你的两个建议都很有效
 
再次感谢
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 17:36:43 | 显示全部楼层
 
这是你原来的lisp,但我对它做了一些不专业的修改,通过旋转选择块。。。在您上次编辑后,它现在可以正常工作。。。再次感谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 02:11 , Processed in 1.439748 second(s), 72 queries .

© 2020-2025 乐筑天下

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