你明白代码在做什么吗? 我现在正在试着破译它。然而,由于这里几乎是下班时间,我确信在我离开之前我不会处理好它。我会在早上回来,让你知道我是否能够得到我的头周围的代码。再次感谢你的帮助。
朗尼 艾伦,我今天下班逃学了,带孩子们去看电影,和查克·E·芝士(ChuckE.Cheese)在一起,所以直到刚才我才有机会复习这个代码。然而,由于妻子今晚工作,我有足够的时间来解决这个问题。
我想我将从第一行开始。我读了一些关于使用(lambda)的书,但我不确定有什么条件可以保证在常规(defun)语句中使用它。我发现反斜杠前面列出的变量是全局变量,而反斜杠后面的变量只是局部变量。至少(defun)声明是这样的。这是否适用于(λ)?
((lambda (name / tab)
根据第二行中的术语,我可以找出代码在做什么,我只是不知道如果我试图在其他事情上使用此代码,我可以使用什么术语。“x”是变量吗?如果是,为什么不包括在(lambda)后面的括号中?我可以用“线”、“圆”、“层”或“颜色”代替“布局”吗?顺便说一句,我假设这行代码基本上提取了“vla get layouts”中列出的任何术语的属性。
(vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
在第三行中,您设置了一个条件评估。我想我理解这种类型的评估,但这个例子有点复杂。据我所知,条件评估的基本设置如下:
(cond
(1st test)(action to take place if true)
(2nd test)(action to take place if true)
(else do this if none of the above is true))
所以在第一个条件中,你已经设置好了,这样“模型”选项卡就不会被修改,对吗?我这么说是因为如果这个条件为真,我看不到会发生任何动作,所以我假设如果省略了动作,那么什么都不会发生。
((eq (vla-get-name x) "Model"))
如果taborder值小于4,则下一个条件返回true,结果是将选项卡重命名为字符串“name”、“tab”和“BOM”的值。
((< 0 (setq tab (vla-get-taborder x)) 4)
(vl-catch-all-apply
(function vla-put-name)
(list x (strcat name (itoa tab) " BOM"))
)
)
对于所有其他条件,返回最终条件,即使用字符串“name”和“taborder”的值命名选项卡。为什么您在这里使用“(itoa(vla get taborder x))和(itoa tab)进行上一次评估?只是想知道。。。
((vl-catch-all-apply
(function vla-put-name)
(list x (strcat name (itoa (vla-get-taborder x))))
)
)
现在我猜最后一段代码实际上是对选项卡进行重命名的部分,这意味着上面的代码只是派生名称并将其存储以供最后一段使用。虽然我不知道,但我还是有点困惑。
(strcat (vl-filename-base (getvar 'dwgname)) "-")
现在我头痛
再次感谢您对这段代码的帮助。
朗尼 您可以通过执行以下操作来修改lenth中的dwg名称:
(setq str1 (strcat (vl-filename-base (getvar 'dwgname))))
(setq str4(strcat "DRW-" (substr str1 5 ))
该示例获取dwg名称的字母5到8,并在其之前添加DRW。
页:
1
[2]