3dwannab 发表于 2022-7-5 23:00:15

选择类似于v的内容

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

tzframpton 发表于 2022-7-5 23:06:06

一种非LISP替代方法是高亮显示监视器上可见的所有对象,然后使用“隔离对象”工具仅限制您看到的对象。然后,您可以运行“选择类似”工具,而不需要在显示器上看到不需要的项目。

3dwannab 发表于 2022-7-5 23:08:38

相信有人能想出一个让我眼前一亮的变通方法/解决方案非常感谢。
 
我将Ctrl+Shift+E设置为选择相似和隔离,并将Ctrl+E设置为unisolate。只需设置Ctrl+Alt+E进行隔离。这比我希望的多了一步,但同样有效。

jdiala 发表于 2022-7-5 23:11:28

这:
 
(defun C:test (/sel_set_win minv maxv slist ss inss)
(defun sel_set_win (/ c tss)
   (if (not nss) (setq nss (ssadd)))
   (setq tss (ssget "_C" minv maxv slist))
   (repeat (setq c (sslength tss))
       (ssadd (ssname tss (setq c (1- c))) nss)
   )
)
(setq minv (getvar 'extmin) maxv (getvar 'extmax))
(setq ss (ssget ":L" ))
(repeat (setq i (sslength ss))
(if slist (setq slist nil))
(if (= "INSERT" (cdr (assoc 0 (entget (ssname ss (setq i (1- i)))))))
   (setq slist (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (ssname ss i)))))))
   (setq slist (list
                (cons 0 (cdr (assoc 0 (entget (ssname ss i)))))
                (cons 8 (cdr (assoc 8 (entget (ssname ss i)))))
             ))
)
(sel_set_win)
)
(command "._isolateobjects" nss "")
)

Bhull1985 发表于 2022-7-5 23:14:19

嘿,Jdiala
我发现,在快速测试之后,你的这个非常好的例程删除了当前视图窗口中除所选插件之外的所有其他插件
您将如何修改以删除与提供的选择同名的所有其他块参照,但将所有其他插入内容单独保留在视图中,同时按照上述示例将选定的块参照保留在原位
谢谢

jdiala 发表于 2022-7-5 23:17:25

 
上述代码已修改
 
(command "._erase" nss "")
to
(command "._isolateobjects" nss "")
 
如果我真的想删除发布在#1上的对象或隔离发布在#3上的对象,我不确定是否需要OP。
 
布尔,我现在要走了。如果没有人提供代码,那么我会提供给你一个。

3dwannab 发表于 2022-7-5 23:20:00

太好了,谢谢。我还没有测试,明天上班会做。我只想根据当时我在模型空间中的位置,选择任何类似于现有命令的内容,只选择监视器上可见的内容。
 
通过将“command”.“isolateobjects”更改为“command”select
 
我用这个行吗?只有选择意味着这样,当选择对象时,我也可以输入任何可用的命令。

jdiala 发表于 2022-7-5 23:24:56

bhull1985,试试这个。与ssget上的“:L”选项不同,该选项在第一个代码中使用,将实体从当前视图中删除。下面的代码,您的选择窗口将是您调用命令后的当前视图。
 
(defun C:test (/i ss vc scs hv l wh b p *error* c)
(defun *error* (m)
(command "_.undo" "end")
(setvar 'cmdecho c)
(princ m)
)

(setq vc (getvar 'viewctr)
      scs (getvar 'screensize)
      hv (/ (getvar 'viewsize) 2.)
      l    nil
      wh(* hv (/ (car scs) (cadr scs)))
   c   (getvar 'cmdecho))
(setvar 'cmdecho 0)          
(command "_.undo" "_begin")      
(if      
(setq ss (ssget ":L" '((0 . "INSERT"))))
(repeat (setq i (sslength ss))
    (if
      (not
      (member (setq bn (cdr (assoc 2 (entget (ssname ss (setq i (1- i))))))) l))
          (setq l (cons bn l))
   )
   )
)
(mapcar
   (function
   (lambda (x)   
       (if
         (setq ss
         (ssget "_X"
             (list
               (cons 0 "INSERT")
               (cons 2 x)
             )
         )
         )
         (repeat
          (setq i (sslength ss))
             (setq i (1- i)
                   p (cdr (assoc 10 (entget (setq b (ssname ss i)))))
              )
      (if
             (not
                  (and
               (> (car p) (- (car vc)wh))
               (> (cadr p) (- (cadr vc) hv))
               (< (car p) (+ (car vc)wh))
               (< (cadr p) (+ (cadr vc) hv))
               )
                  )
             (entdel b)
         )   
         )
    )
)
)
l
)
(command "_.undo" "_end")
(setvar 'cmdecho c)
(princ)
)

3dwannab 发表于 2022-7-5 23:28:36

很抱歉没有使用您发布的包含以下内容的代码进行测试:
(命令“.u isolateobjects“nss”)
 
但它在所有模型空间中仍然会得到类似的项目,而不是监视器上可见的项目。见附件。我只看到内部楼梯的绿线。它在右上角的外部楼梯上。谢谢
 

我想要什么。
 

后果

wimal 发表于 2022-7-5 23:30:26

(command "._isolateobjects" nss "")
在CAD 2006中,上述命令不可用。我可以用什么代替ISOLATEOBJECTS
页: [1] 2
查看完整版本: 选择类似于v的内容