不知在哪里
嘿,伙计们。。。。请帮我修一下
当我尝试运行这个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)
) chprop线处的额外“”。。
建议:
-使用entmod更改块的图层属性,使用chprop往往会给您带来当前空间问题中未选择/未选择块的问题。
-在tblnext循环内调用更改层例程。
-动态块不会用普通(cons 2 blknme)线选择。
-在图层生成过程中,将拒绝匿名块名,例如“*U5”
-外部参照嵌套块名称也会成为一个问题
如果你需要帮助,就喊一声 是的,pBe我需要你的帮助来纠正这个代码。。。。
请给我提供正确的代码。。。
储罐u
Gs公司 我可以带你去gS7。还有几个问题。
-外部参照是否包含为有效块?(主外部参照,即..不是嵌套的外部参照)?
-你们是故意锁层的吗?在处理之前,我们可能需要先解锁层,或者不去理会它。会是哪一个?
-你使用动态块吗?
-所有新层的颜色将为2(黄色)?
-块颜色和线型特性是“bylayer”和“图层0上的图元”?
1.不包括外部参照
2.是的,我们是故意锁定图层的
是的,我们使用动态块
4、用户要求的颜色
5、块颜色和线型属性为bylayer
很抱歉延迟回复pbe
gs7,帮我们一把。
如果块位于锁定层上,是否意味着不处理该块?
那么,什么颜色适合哪一层? 第2项(我们应该解锁他们的图层,并为tat创建图层……)
第4项所有层都需要绿色,或者用户可以选择他/她想要的颜色 块到层
(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并更新现有图层的颜色。 哦储罐u pBe。。你太棒了
它在AutoCAD 2008中运行良好。。。。。
我也尝试了autoCAD 2002版本,但它不起作用。。。。显示错误(错误:无函数定义:VLA-GET-EFFECTIVENAME) @pBe公司
在我的a2008中,如果一个块有两个以上的属性,则只有块和一个属性更改为颜色3(绿色)
难道所有属性和块都不应该改变吗?
页:
[1]
2