乐筑天下

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

[编程交流] 选择类似于v的内容

[复制链接]

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 23:00:15 | 显示全部楼层 |阅读模式
我已经设置了Ctrl+Q来选择相似项。当与另一个快捷方式一起使用时非常方便,我已经设置了Ctrl+H来隐藏该选择或任何其他我希望调用的命令。
 
这很管用,但我想知道是否可以用LISP实现AutoCADs的相同标准命令select Simula,唯一的区别是它只选择监视器上可见的内容。
 
我认为这是一个长期的要求,但值得问:]。它可以方便地删除屏幕上的类似内容,而无需移动选择(取消选择)所选的其他项目。
提前谢谢。
回复

使用道具 举报

49

主题

1246

帖子

1210

银币

后起之秀

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

铜币
254
发表于 2022-7-5 23:06:06 | 显示全部楼层
一种非LISP替代方法是高亮显示监视器上可见的所有对象,然后使用“隔离对象”工具仅限制您看到的对象。然后,您可以运行“选择类似”工具,而不需要在显示器上看到不需要的项目。
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 23:08:38 | 显示全部楼层
相信有人能想出一个让我眼前一亮的变通方法/解决方案非常感谢。
 
我将Ctrl+Shift+E设置为选择相似和隔离,并将Ctrl+E设置为unisolate。只需设置Ctrl+Alt+E进行隔离。这比我希望的多了一步,但同样有效。
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:11:28 | 显示全部楼层
这:
 
  1. (defun C:test (/  sel_set_win minv maxv slist ss i  nss)
  2. (defun sel_set_win (/ c tss)
  3.    (if (not nss) (setq nss (ssadd)))
  4.      (setq tss (ssget "_C" minv maxv slist))
  5.      (repeat (setq c (sslength tss))
  6.        (ssadd (ssname tss (setq c (1- c))) nss)  
  7.      )
  8. )
  9. (setq minv (getvar 'extmin) maxv (getvar 'extmax))
  10. (setq ss (ssget ":L" ))
  11. (repeat (setq i (sslength ss))
  12. (if slist (setq slist nil))
  13. (if (= "INSERT" (cdr (assoc 0 (entget (ssname ss (setq i (1- i)))))))
  14.      (setq slist (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (ssname ss i)))))))
  15.      (setq slist (list
  16.                 (cons 0 (cdr (assoc 0 (entget (ssname ss i)))))
  17.                 (cons 8 (cdr (assoc 8 (entget (ssname ss i)))))
  18.              ))
  19. )
  20. (sel_set_win)
  21. )
  22. (command "._isolateobjects" nss "")
  23. )
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 23:14:19 | 显示全部楼层
嘿,Jdiala
我发现,在快速测试之后,你的这个非常好的例程删除了当前视图窗口中除所选插件之外的所有其他插件
您将如何修改以删除与提供的选择同名的所有其他块参照,但将所有其他插入内容单独保留在视图中,同时按照上述示例将选定的块参照保留在原位
谢谢
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:17:25 | 显示全部楼层
 
上述代码已修改
 
  1. (command "._erase" nss "")
  2. to
  3. (command "._isolateobjects" nss "")

 
如果我真的想删除发布在#1上的对象或隔离发布在#3上的对象,我不确定是否需要OP。
 
布尔,我现在要走了。如果没有人提供代码,那么我会提供给你一个。
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 23:20:00 | 显示全部楼层
太好了,谢谢。我还没有测试,明天上班会做。我只想根据当时我在模型空间中的位置,选择任何类似于现有命令的内容,只选择监视器上可见的内容。
 
通过将“command”.“isolateobjects”更改为“command”select
 
我用这个行吗?只有选择意味着这样,当选择对象时,我也可以输入任何可用的命令。
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:24:56 | 显示全部楼层
bhull1985,试试这个。与ssget上的“:L”选项不同,该选项在第一个代码中使用,将实体从当前视图中删除。下面的代码,您的选择窗口将是您调用命令后的当前视图。
 
  1. (defun C:test (/  i ss vc scs hv l wh b p *error* c)
  2. (defun *error* (m)
  3. (command "_.undo" "end")
  4. (setvar 'cmdecho c)
  5. (princ m)
  6. )
  7. (setq vc (getvar 'viewctr)
  8.       scs (getvar 'screensize)
  9.       hv (/ (getvar 'viewsize) 2.)
  10.       l    nil
  11.       wh  (* hv (/ (car scs) (cadr scs)))
  12.    c   (getvar 'cmdecho))
  13. (setvar 'cmdecho 0)          
  14. (command "_.undo" "_begin")      
  15. (if      
  16. (setq ss (ssget ":L" '((0 . "INSERT"))))
  17.   (repeat (setq i (sslength ss))
  18.     (if
  19.       (not
  20.         (member (setq bn (cdr (assoc 2 (entget (ssname ss (setq i (1- i))))))) l))
  21.           (setq l (cons bn l))
  22.      )
  23.    )
  24. )
  25. (mapcar
  26.    (function
  27.      (lambda (x)     
  28.        (if
  29.          (setq ss
  30.            (ssget "_X"
  31.              (list
  32.                (cons 0 "INSERT")
  33.                (cons 2 x)
  34.              )
  35.            )
  36.          )
  37.          (repeat
  38.             (setq i (sslength ss))
  39.              (setq i (1- i)
  40.                    p (cdr (assoc 10 (entget (setq b (ssname ss i)))))
  41.               )
  42.         (if
  43.              (not
  44.                     (and
  45.                  (> (car p) (- (car vc)  wh))
  46.                  (> (cadr p) (- (cadr vc) hv))
  47.                  (< (car p) (+ (car vc)  wh))
  48.                  (< (cadr p) (+ (cadr vc) hv))
  49.                )
  50.                   )
  51.              (entdel b)
  52.            )   
  53.          )
  54.     )
  55.   )
  56. )  
  57. l
  58. )
  59. (command "_.undo" "_end")
  60. (setvar 'cmdecho c)
  61. (princ)
  62. )
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 23:28:36 | 显示全部楼层
很抱歉没有使用您发布的包含以下内容的代码进行测试:
(命令“.u isolateobjects“nss”)
 
但它在所有模型空间中仍然会得到类似的项目,而不是监视器上可见的项目。见附件。我只看到内部楼梯的绿线。它在右上角的外部楼梯上。谢谢
 
000016awfrdjrja8bljxxa.jpg
我想要什么。
 
000018xdafvp085a1cakpv.jpg
后果
回复

使用道具 举报

171

主题

447

帖子

276

银币

中流砥柱

Rank: 25

铜币
860
发表于 2022-7-5 23:30:26 | 显示全部楼层
  1. (command "._isolateobjects" nss "")

在CAD 2006中,上述命令不可用。我可以用什么代替ISOLATEOBJECTS
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:32 , Processed in 1.360097 second(s), 74 queries .

© 2020-2025 乐筑天下

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