gS7 发表于 2022-7-6 07:07:28

错误

嘿,伙计们,我Lisp程序的时候出错了
(defun c:Test(/ activedoc newsset ssets ssnm)
(vl-load-com)
   (setq activedoc(vla-get-activedocument (vlax-get-acad-object)))
(setq ssets(vla-get-selectionsets activedoc))
(setq newsset(vla-add ssets "ss1"))
(vla-selectonscreen newsset)
(setq cntr 0)
(repeat (vla-get-count newsset)
    (setq iteam(vla-item newsset cntr))
        (setq check(vlax-property-available-p item "Color" t))
        (if check
           (vlax-put-property item "color" 4 )
        )
    (setq cntr(1+ cntr))
)
   
)

 
 
; error: Automation Error. The named selection set exists

gS7 发表于 2022-7-6 07:17:13

噢我自己找到了解决办法
 
(vla-delete(vla-item ssets "ss1"))

pBe 发表于 2022-7-6 07:31:14

(defun c:Test (/ activedoc newsset ssets ssnm)
   (vl-load-com)
   (setq activedoc (vla-get-activedocument (vlax-get-acad-object)))
   (setq ssets (vla-get-selectionsets activedoc))
   (if (not (vl-catch-all-error-p
                  (setq exs (vl-catch-all-apply
                                    'vla-item
                                    (list ssets "ss1")
                                    ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of vl-catch-all-error-p
            ) ;_ end of not
         (vla-delete exs)
         ) ;_ end of if

   (setq newsset (vla-add ssets "ss1"))
   (vla-selectonscreen newsset)
   (setq cntr 0)
   (repeat (vla-get-count newsset)
         (setq item (vla-item newsset cntr))
         (setq check (vlax-property-available-p item "Color" t))
         (if check
               (vlax-put-property item "color" 4)
               ) ;_ end of if
         (setq cntr (1+ cntr))
         ) ;_ end of repeat

   )
 
注:iteam to item

gS7 发表于 2022-7-6 07:34:51

pBe公司
 
谢谢你更新代码
 
 
 
 
哎呀。。。那是我的错

pBe 发表于 2022-7-6 07:49:40

 
不客气,很高兴有帮助

Lee Mac 发表于 2022-7-6 07:55:58

我建议如下:
 
(defun c:test ( / ssc sso )
   (setq ssc (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))))
   (if (vl-catch-all-error-p (setq sso (vl-catch-all-apply 'vla-item (list ssc "ss1"))))
       (setq sso (vla-add ssc "ss1"))
       (vla-clear sso)
   )
   (vla-selectonscreen sso)
   (vlax-for obj sso (vla-put-color obj accyan))
   (vla-delete sso)
   (princ)
)
(vl-load-com)

gS7 发表于 2022-7-6 07:59:12

坦克u lee
 
代码的储罐。。它看起来比我的简单

Lee Mac 发表于 2022-7-6 08:09:17

 
不客气,甘尼什。
 
我的代码中需要注意的几点:ActiveX SelectionSet对象是一个集合,因此可以使用vlax for函数进行迭代,而不是使用vla item在集合中的每个索引处检索项。此外,请始终记住在完成时删除SelectionSet对象(使用vla delete),以免使SelectionSets集合膨胀。
 
最后,无需测试颜色特性的可用性,因为所有图形对象都具有此特性,但是,您可能仍需要考虑锁定图层上的对象,该特性将是只读的。
页: [1]
查看完整版本: 错误