handasa 发表于 2022-7-5 17:42:37

如何从lisp中删除select bylayer

Stefan BMR 发表于 2022-7-5 17:45:36

在同一位置,从两个列表中删除6和62。
在这种情况下,线路可能更简单:
(mapcar '(lambda (a) (assoc a e)) '(0 8 50))

handasa 发表于 2022-7-5 17:47:32

 
我将ssb和ssr lisp中的行更改为上面的行,它仍然选择由原始块层过滤的块

Stefan BMR 发表于 2022-7-5 17:52:51

好啊请澄清要求,简洁完整。

handasa 发表于 2022-7-5 17:57:47

 
1-lisp按名称和旋转角度选择块,忽略图层
1-lisp仅按名称选择块,忽略图层和其他特性
 
谢谢你的耐心和帮助

Stefan BMR 发表于 2022-7-5 18:01:08

SSR表示块名和旋转,SSB仅表示块名。
 
(defun C:SSR ( / s1 i e l f o n s2)
(princ "\nSelect source object(s):")
(if
   (if
   (setq s1 (ssget "I" '((0 . "INSERT"))))
   (progn (sssetfirst nil nil) s1)
   (setq s1 (ssget '((0 . "INSERT"))))
   )
   (progn
   (repeat (setq i (sslength s1))
       (setq i (1- i)
             o (vlax-ename->vla-object (ssname s1 i))
             e (entget (ssname s1 i))
             l (mapcar '(lambda (a) (assoc a e)) '(0 50))
             n (cons (vlax-get o (if (vlax-property-available-p o 'EffectiveName) 'EffectiveName 'Name)) n)
             )
       (if (not (member l f)) (setq f (cons l f)))
       )
   (setq f (mapcar '(lambda (a) (append '((-4 . "<AND")) a '((-4 . "AND>")))) f))
   (setq f (append '((-4 . "<OR")) (apply 'append f) '((-4 . "OR>"))))
   (princ "\n\nSelect area for similar blocks...")
   (if (setq s2 (ssget f))
       (repeat (setq i (sslength s2))
         (if
         (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) 'EffectiveName 'Name)) n))
         (ssdel e s2)
         )
         )
       )
   (if s2 (princ (strcat (itoa (sslength s2)) " objects")))
   (sssetfirst nil s2)
   )
   )
(if (zerop (getvar 'cmdactive)) (princ) s2)
)

(defun C:SSB ( / s1 i e l o n s2)
(princ "\nSelect source object(s):")
(if
   (if
   (setq s1 (ssget "I" '((0 . "INSERT"))))
   (progn (sssetfirst nil nil) s1)
   (setq s1 (ssget '((0 . "INSERT"))))
   )
   (progn
   (repeat (setq i (sslength s1))
       (setq o (vlax-ename->vla-object (ssname s1 (setq i (1- i))))
             n (vlax-get o (if (vlax-property-available-p o 'EffectiveName) 'EffectiveName 'Name))
       )
       (if (not (member n l)) (setq l (cons n l)))
   )
   (princ "\n\nSelect area for similar blocks...")
   (if (setq s2 (ssget '((0 . "INSERT"))))
       (repeat (setq i (sslength s2))
         (if
         (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)
                   'EffectiveName
                   'Name
               )
               )
               l
             )
         )
         (ssdel e s2)
         )
         )
       )
   (if s2 (princ (strcat (itoa (sslength s2)) " objects")))
   (sssetfirst nil s2)
   )
   )
(if (zerop (getvar 'cmdactive)) (princ) s2)
)

handasa 发表于 2022-7-5 18:05:38

@斯特凡BMR
工作完美。。。非常感谢先生
页: 1 [2]
查看完整版本: 按名称和rota选择块