gS7 发表于 2022-7-6 07:25:10

不知在哪里

嘿,伙计们。。。。
 
请帮我修一下
 
当我尝试运行这个Lisp函数时,它会显示错误消息,如(命令:test未知命令“test”。按F1键可获取帮助。
未知命令“TEST”。按F1键获取帮助。
未知命令“TEST”。按F1键获取帮助。)
 
我不知道我到底错过了什么。。。请帮帮我
 
还有一个问题,如何将子函数设置为局部函数
 
(defun c:test (/ old_cmh old_lay blocklist tb1 tb2 name2 blocklist)
(setq old_cmh (getvar "cmdecho"))
(setq old_lay (getvar "clayer"))
(setvar "cmdecho" 0)
(setq blocklist '())
(setq tb1 (tblnext "BLOCK" ""))
(setq name (cdr (assoc 2 tb1)))
(setq blocklist (cons name blocklist))
(tblnext "Block" t)
(while
   (setq tb2 (tblnext "Block"))
    (setq name2 (cdr (assoc 2 tb2)))
    (setq blocklist (cons name2 blocklist))
)
(GS:Place)
(setvar "clayer" old_lay)
(setvar "cmdecho" old_cmh)
(princ)

)

;;Sub

(Defun GS:Place (/ pnt first_block find first nxt_blk find )
(setq pnt 0)
(setq first_block (nth pnt blocklist))
(VL-CMDF "LAYER" "M" first_block "c" "2" "" "")
(setq find_first (ssget "x" (list (cons 0 "INSERT") (cons 2 first_block))))
(vl-cmdf "chprop" find_first "" "la" first_block "" "")
(repeat (1- (length blocklist))
   (setq nxt_blk (nth (1+ pnt) blocklist))
   (VL-CMDF "LAYER" "M" nxt_blk "c" "2" "" "")
   (setq find (ssget "x" (list(cons 0 "INSERT") (cons 2 nxt_blk))))
   (vl-cmdf "chprop" find "" "la" nxt_blk "" "")
   (setq pnt (1+ pnt))
)
(princ)
)

pBe 发表于 2022-7-6 07:34:38

chprop线处的额外“”。。
 
建议:
-使用entmod更改块的图层属性,使用chprop往往会给您带来当前空间问题中未选择/未选择块的问题。
-在tblnext循环内调用更改层例程。
-动态块不会用普通(cons 2 blknme)线选择。
-在图层生成过程中,将拒绝匿名块名,例如“*U5”
-外部参照嵌套块名称也会成为一个问题
 
如果你需要帮助,就喊一声

gS7 发表于 2022-7-6 07:42:14

是的,pBe我需要你的帮助来纠正这个代码。。。。
请给我提供正确的代码。。。
 
储罐u
 
Gs公司

pBe 发表于 2022-7-6 07:43:57

我可以带你去gS7。还有几个问题。
 
-外部参照是否包含为有效块?(主外部参照,即..不是嵌套的外部参照)?
-你们是故意锁层的吗?在处理之前,我们可能需要先解锁层,或者不去理会它。会是哪一个?
-你使用动态块吗?
-所有新层的颜色将为2(黄色)?
-块颜色和线型特性是“bylayer”和“图层0上的图元”?

gS7 发表于 2022-7-6 07:54:36

 
1.不包括外部参照
2.是的,我们是故意锁定图层的
是的,我们使用动态块
4、用户要求的颜色
5、块颜色和线型属性为bylayer
 
很抱歉延迟回复pbe

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

 
gs7,帮我们一把。
如果块位于锁定层上,是否意味着不处理该块?
那么,什么颜色适合哪一层?

gS7 发表于 2022-7-6 08:06:00

第2项(我们应该解锁他们的图层,并为tat创建图层……)
第4项所有层都需要绿色,或者用户可以选择他/她想要的颜色

pBe 发表于 2022-7-6 08:12:44

块到层
 

(defun c:BTLay ( / mklay LunL aDoclayers lklst)
(vl-load-com)
(defun mklay (nm c laycoll / x)
        (if (not (tblsearch "Layer" nm))
       (setq x (vla-add laycoll nm))
                  )
(vla-put-color (vla-item laycoll nm) c))
(defun LunL (lc lst / llst)
(if lst (foreach n lst
   (vla-put-lock (vla-item lc n) :vlax-true))
   (vlax-for a        lc
   (if (eq (vla-get-lock a) :Vlax-true)
(progn
(setq llst (cons (vla-get-name a) llst))
(vla-put-lock a :vlax-false)))))
llst
)        
(setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object))
      Layers (vla-get-layers aDoc))
(Setq lklst (lunl layers nil))                             
(vlax-for layout (vla-get-layouts aDoc)
    (vlax-for i (vla-get-block layout)
      (if (and      
                (= (vla-get-ObjectName i) "AcDbBlockReference")
                (not (vlax-property-available-p i 'Path))       
          )
        (progn
(mklay (setq bn (vlax-get i (if (vlax-property-available-p i 'Effectivename)
                          'EffectiveName 'Name))) 3 layers)
              (vla-put-layer i bn))
      )
    )
)
(lunl layers lklst)
(princ)
)

 
命令:BTlay
 
编辑:vlax-property-available-p并更新现有图层的颜色。

gS7 发表于 2022-7-6 08:14:16

哦储罐u pBe。。你太棒了
 
它在AutoCAD 2008中运行良好。。。。。
我也尝试了autoCAD 2002版本,但它不起作用。。。。显示错误(错误:无函数定义:VLA-GET-EFFECTIVENAME)

stevesfr 发表于 2022-7-6 08:20:36

@pBe公司
在我的a2008中,如果一个块有两个以上的属性,则只有块和一个属性更改为颜色3(绿色)
难道所有属性和块都不应该改变吗?
页: [1] 2
查看完整版本: 不知在哪里