参数过多问题
大家早上好!我很难想出如何正确修复以下代码。我在强调的部分中得到了太多的论点,这对我来说很有意义,但我不完全确定该怎么解决。我需要在更改之前添加程序吗?任何帮助都将不胜感激!
我基本上希望它捕捉到特定层上的所有块内图案填充和实体,然后更改每个块的图案、比例和背景色。我认为我的过程是正确的,但当我有3个限定符时,我不认为是否/和是正确的。提前感谢您的帮助!
(defun c:planproposedhatch (/ doc)
(or *colorobject*
(setq *colorobject*
(vla-getinterfaceobject
(vlax-get-acad-object)
(strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2))
)
)
)
(if
(null (vl-catch-all-error-p (vl-catch-all-apply 'vla-setrgb (list *colorobject* 255 255 255))))
(progn (vlax-for blk (vla-get-blocks (setq doc (vla-get-Activedocument (vlax-get-acad-object))))
(if (= :vlax-false (vla-get-isxref blk))
(vlax-for obj blk
(if (and (= "08_Proposed Data" (strcase (vla-get-layer obj)))
(= "AcDbHatch" (vla-get-objectname obj))
(= "SOLID" (strcase (vla-get-patternname obj)))
(vlax-write-enabled-p obj)
)
(vl-catch-all-apply 'vla-put-patternname obj ANSI31)
(vl-catch-all-apply 'vla-put-ScaleFactor obj 12)
(vl-catch-all-apply 'vla-put-backgroundcolor (list obj *colorobject*))
)
)
)
)
(vla-regen doc acallviewports)
)
)
(princ)
)
(vl-load-com)
(princ)
你好
如果您想使用If函数执行多次操作,则需要使用progn函数。
(progn
(vl-catch-all-apply 'vla-put-patternname obj ANSI31)
(vl-catch-all-apply 'vla-put-ScaleFactor obj 12)
(vl-catch-all-apply 'vla-put-backgroundcolor (list obj *colorobject*))
)
您也可以像这样使用COND:
(cond ((and (= "08_Proposed Data" (strcase (vla-get-layer obj)))
(= "AcDbHatch" (vla-get-objectname obj))
(= "SOLID" (strcase (vla-get-patternname obj)))
(vlax-write-enabled-p obj)
)
(vl-catch-all-apply 'vla-put-patternname obj ansi31)
(vl-catch-all-apply 'vla-put-scalefactor obj 12)
(vl-catch-all-apply 'vla-put-backgroundcolor (list obj *colorobject*))
)
)
尽管你的测试在这里总是会失败:
(= "08_Proposed Data" (strcase (vla-get-layer obj)))
你明白为什么了吗? 这会因为strcase而失败吗?
答对 了
除了上述其他错误外,没有函数定义vla put patternname,因此请尝试以下操作:
(if
(null (vl-catch-all-error-p (vl-catch-all-apply 'vla-setrgb (list *colorobject* 255 255 255))))
(progn (vlax-for blk (vla-get-blocks (setq doc (vla-get-Activedocument (vlax-get-acad-object))))
(if (= :vlax-false (vla-get-isxref blk))
(vlax-for obj blk
(if (and (vlax-write-enabled-p obj)
(= "08_PROPOSED DATA" (strcase (vla-get-layer obj)))
(= "AcDbHatch" (vla-get-objectname obj))
(= "SOLID" (strcase (vla-get-patternname obj)))
)
(progn
(vla-setPattern obj acHatchPatternTypePreDefined "ANSI31")
(vla-put-ScaleFactor obj 12)
(vla-put-backgroundcolor (list obj *colorobject*))
)
)
)
)
)
(vla-regen doc acallviewports)
)
)
你惹他了?
(= "08_PROPOSED DAtA" (strcase (vla-get-layer obj)))
不,你搞错我了 谢谢大家!我试试看它是怎么工作的!我感谢大家的帮助。在它没有真正做任何事情之前,我认为这是因为我的vla put模式名不正确。我假设这就是函数定义,因为你是如何“得到”它的。谢谢我要试一试!
另一个快速问题是,例如,如果我想让所有以“\u PLAN”结尾的block将填充比例设置为12,并让所有以“\u ELEV”结尾的块将填充比例设置为60,那么这是否会涉及到围绕已在更新比例的函数的(cond)? 有人知道如何使其也影响动态块吗?它似乎只在常规块上工作,而现在它并没有改变背景色。
经过测试和一点搜索,我还发现我想要的是vla put patternscale,而不是vla put scalefactor。
除了添加BG颜色之外,它什么都做,而且只在常规块上工作。
这将改变的大部分区块是动态的。有什么想法吗?任何建议都会有帮助!提前谢谢。
(defun c:planproposedhatch (/ doc)
(or *colorobject*
(setq *colorobject*
(vla-getinterfaceobject
(vlax-get-acad-object)
(strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2))
)
)
)
(if
(null (vl-catch-all-error-p (vl-catch-all-apply 'vla-setrgb (list *colorobject* 255 255 255))))
(progn (vlax-for blk (vla-get-blocks (setq doc (vla-get-Activedocument (vlax-get-acad-object))))
(if (= :vlax-false (vla-get-isxref blk))
(vlax-for obj blk
(if (and (vlax-write-enabled-p obj)
(= "08_Proposed Data" (vla-get-layer obj))
(= "AcDbHatch" (vla-get-objectname obj))
(= "SOLID" (strcase (vla-get-patternname obj)))
)
(progn
(vla-setPattern obj acHatchPatternTypePreDefined "ANSI31")
(vla-put-patternscale obj 12)
(vla-put-backgroundcolor (list obj *colorobject*))
)
)
)
)
)
(vla-regen doc acallviewports)
)
)
(vl-load-com)
(princ)
);defun
页:
[1]
2