ninja37 发表于 2023-2-21 21:27

求助ssget选择图元后 在筛选的问题

求助ssget选择图元后在筛选的问题:

选取图元后   筛选出18.0   20.022.0的圆移动到图层7   颜色bylayer
               然后再筛选出8.0   10.0 的圆 移动到图层7   颜色bylayer

求助一下各位大师,这个怎么写呢?

xtjd 发表于 2023-2-21 21:27

(defun c:test(/ ed obj ss st n1 n2)
(setvar "cmdecho" 0)
(if(setq ss(ssget '((0 . "circle"))))
    (progn
      (setq st -1 n1 0 n2 0)
      (repeat(sslength ss)
      (setq
          obj(vlax-ename->vla-object(ssname ss(setq st(1+ st))))
          ed(vla-get-Diameter obj)
      )
      (cond
          ((or(= ed 8.0)(= ed 8.01)(= ed 10.0)(= ed 10.01))(vla-put-layer obj "7")(setq n1(1+ n1)))
          ((or(= ed 18.0)(= ed 20.0)(= ed 19.98)(= ed 20.02))(vla-put-layer obj "8")(setq n2(1+ n2)))
      )
      (vla-put-color obj 256)
      )
      (princ (strcat "\n成功执行: "(itoa n1)"个圆至7层,"(itoa n2)"个圆至8层"))
    )
)
(prin1)
)

ninja37 发表于 2023-2-21 22:16

目前用的这个在输入命令后 要选择两次图元    要实现的效果是 只选择一次自动分离图元
(defun C:LHmovelocation78(/ lm_xiaoding lm_daozhu)
    (if (not (tblsearch "layer" "7"))(command "-layer" "n" "7" "c" "4" "7" ""));endif
    (if (not (tblsearch "layer" "8"))(command "-layer" "n" "8" "c" "2" "8" ""));endif
             (setq lm_xiaoding (ssget'((0 . "circle")(-4 . "<or")(40 . 8)(40 . 8.01)(40 . 10)(40 . 10.01)(-4 . "or>")))
                   lm_daozhu   (ssget'((0 . "circle")(-4 . "<or")(40 . 4)(40 . 19.98)(40 . 20.0)(40 . 20.02)(-4 . "or>"))));endsetq
    (if lm_xiaoding (command "chprop" lm_xiaoding "" "la" "7" "c" "bylayer" ""))
    (if lm_daozhu   (command "chprop" lm_daozhu   "" "la" "8" "c" "bylayer" ""))
    (princ"\n转换分类完成")(princ)
);end defun

ninja37 发表于 2023-2-22 21:32

xtjd 发表于 2023-2-22 07:45
(defun c:test(/ ed obj ss st n1 n2)
(setvar "cmdecho" 0)
(if(setq ss(ssget '((0 . "circle")))) ...

谢谢,终于解决了问题。谢谢帮忙。

刘炎华 发表于 2023-3-5 23:29

xtjd 发表于 2023-2-21 21:27
(defun c:test(/ ed obj ss st n1 n2)
(setvar "cmdecho" 0)
(if(setq ss(ssget '((0 . "circle")))) ...
大师,您帮我看下是不是红色的地方不对?谢谢
(defun c:CH(/ ed obj ss st n1 n2 n3 n4)
(princ "转换图层")
(setvar "cmdecho" 0)
(if(setq ss(ssget))
    (progn
      (setq st -1 n1 0 n2 0 n3 0 n4 0)
      (repeat(sslength ss)
      (setq
          obj(vlax-ename->vla-object(ssname ss(setq st(1+ st))))
          ed (vla-get-layer obj)
      )
      (cond
          ((= ed 151)(vla-put-layer obj "MATER")(setq n1(1+ n1)))
          ((= ed 20) (vla-put-layer obj "MATER")(setq n2(1+ n2)))
          ((= ed 251)(vla-put-layer obj "A")(setq n3(1+ n3)))
          ((= ed 138)(vla-put-layer obj "A")(setq n4(1+ n4)))
      )
      )
    )
)
(prin1)
)

xtjd 发表于 2023-3-6 07:45

刘炎华 发表于 2023-3-5 23:29
大师,您帮我看下是不是红色的地方不对?谢谢
(defun c:CH(/ ed obj ss st n1 n2 n3 n4)
(princ "转 ...

图层名称属于字符串,(= ed "151")

刘炎华 发表于 2023-3-6 08:00

好的,谢谢!

刘炎华 发表于 2023-3-6 08:55

本帖最后由 刘炎华 于 2023-3-6 10:47 编辑

xtjd 发表于 2023-3-6 07:45
图层名称属于字符串,(= ed "151")
大师,我这样做不行呢?

……又弄了下,可以了
页: [1]
查看完整版本: 求助ssget选择图元后 在筛选的问题